Jul 29

En IIS, en tu sitio web, ve a propiedades, luego a HTTP Headers y haz clic en el botón MIME Types.
Agrega las siguientes:

Extensión, MIME Type

.docm,application/vnd.ms-word.document.macroEnabled.12
.docx,application/vnd.openxmlformats-officedocument.wordprocessingml.document
.dotm,application/vnd.ms-word.template.macroEnabled.12
.dotx,application/vnd.openxmlformats-officedocument.wordprocessingml.template
.potm,application/vnd.ms-powerpoint.template.macroEnabled.12
.potx,application/vnd.openxmlformats-officedocument.presentationml.template
.ppam,application/vnd.ms-powerpoint.addin.macroEnabled.12
.ppsm,application/vnd.ms-powerpoint.slideshow.macroEnabled.12
.ppsx,application/vnd.openxmlformats-officedocument.presentationml.slideshow
.pptm,application/vnd.ms-powerpoint.presentation.macroEnabled.12
.pptx,application/vnd.openxmlformats-officedocument.presentationml.presentation
.xlam,application/vnd.ms-excel.addin.macroEnabled.12
.xlsb,application/vnd.ms-excel.sheet.binary.macroEnabled.12
.xlsm,application/vnd.ms-excel.sheet.macroEnabled.12
.xlsx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.xltm,application/vnd.ms-excel.template.macroEnabled.12
.xltx,application/vnd.openxmlformats-officedocument.spreadsheetml.template

Si no agregas las extensiones, entonces si colocas un archivo en tu sitio web, cuando el visitante haga clic en él, el servidor regresará un error, y el visitante no podrá descargarlo. Esto es especialmente importante para el webmail.

Jul 7

En ocasiones, cuando estás trabajando en Visual Web Developer 2008 con componentes ASP.NET de terceros (third party), notarás que no funciona el Intellisense y además el diseñador marca que tu componente no está definido. Este es un ejemplo de este problema con el componente FreeTextBox:

Component Not Declared

Noté que esto me pasaba por la siguiente razón:
Los archivos de mi aplicación están hosteados en un servidor (no en mi PC de desarrollo), por lo que creé una conexión a una unidad de red, asignándola a una letra. Es decir, había mapeado \\servidor\inetpub\wwwroot\proyecto a w:\proyecto. Al parecer si tienes tu servidor web de desarrollo corriendo en tu misma PC, lo anterior no ocurre, pero me parece que es muy probable que trabajes en una PC de desarrollo y accedas a un servidor de desarrollo mediante la red local donde están (y corren) los archivos de tu aplicación. Al menos es mi caso.

Para corregir esta situación tienes que agregar los DLLs del control en el GAC.

Deberás usar la utilidad gacutil.exe que viene en el SDK del .Net Framework 2. Si no lo tienes, descarga el SDK de aquí:
http://www.asp.net/Downloads/essential/

Coloca el componente (el DLL) en un fólder de la PC en la que usas Visual Web Developer 2008:
explorer.gif

Ahora abre una ventana de MS-DOS, cámbiate a la carpeta en la que tienes instalado el gacutil.exe y corre el comando:

gacutil -i nombredeldll.dll

Algo como esto:
Registrando el DLL en el GAC

Ahora reinicia Visual Web Developer, abre tu aplicación de nueva cuenta y mira como ya funciona el Intellisense y no aparece el error de que tu control no está declarado:
Intellisense funcionando

Espero que te sea de utilidad. :)

Actualización
Si necesitaras desinstalar la libreria del GAC, utiliza esta instrucción:
gacutil -u NombreDeLaLibreria
No escribas .dll
Por ejemplo:
gacutil -u FreeTextBox

Feb 2

Si creas una página en ASP.NET y en su evento Load pones lo siguiente:

VB.NET:
  1. Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  2.         Label1.Text = Session.SessionID & " " & Session("idsesion")
  3.         Response.Write(Session.SessionID)
  4.     End Sub

notarás que cada vez que oprimes Refresh o Actualizar en tu navegador, la variable de sesión se modifica. Definitivamente es raro porque uno siempre ha sabido que la variable de sesión debe ser la misma durante todo el tiempo que el visitante permanece visitando la aplicación.

Bueno, la variable de sesión permanece igual siempre y cuando se coloque algún valor en el estado de la sesión. (yo tampoco entiendo muy bien la razón).

El caso es que para solucionar el problema "de raíz", creé una variable de sesión en el código del archivo Global.asax, justo cuando se crea la sesión (checa la línea 21):

VB.NET:
  1. <%@ Application Language="VB" %>
  2.  
  3. <script runat="server">
  4.  
  5.     Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
  6.         ' Code that runs on application startup
  7.     End Sub
  8.    
  9.     Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)
  10.         ' Code that runs on application shutdown
  11.     End Sub
  12.        
  13.     Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
  14.         ' Code that runs when an unhandled error occurs
  15.     End Sub
  16.  
  17.     Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
  18.         ' Code that runs when a new session is started
  19.         'La siguiente linea evita que session.sessionid se modifique cada
  20.         'vez que se oprime Refresh en el navegador
  21.         Session("idsesion") = Session.SessionID
  22.     End Sub
  23.  
  24.     Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
  25.         ' Code that runs when a session ends.
  26.         ' Note: The Session_End event is raised only when the sessionstate mode
  27.         ' is set to InProc in the Web.config file. If session mode is set to StateServer
  28.         ' or SQLServer, the event is not raised.
  29.     End Sub
  30.        
  31. </script>

Esto hace que el estado de la sesión permanezca sin modificarse y ahora el código del Response.Write(Session.SessionID) citado anteriormente regresa siempre el mismo valor. =)

Jul 31

En algunas configuraciones de IIS 6 de Windows 2003 Server puede ocurrir que no se muestran los videos FLV que añadimos a películas de Flash.

Esto puede deberse a que no tenemos configurados el MIME Type para este tipo de archivos. Tan pronto como lo configuremos, los videos se desplegarán correctamente.

En la consola de IIS, en las propiedades del Sitio Web en el que estés colocando tu video, encuentra la pestaña llamada HTTP Headers y agrega el siguiente MIME Type:

Extension: .flv
MIME Type: video/x-flv

MIME Type

¡Listo!

Jul 23

Cuando compras un Certificado de Seguridad SSL, el sitio web que proteges se accede mediante una dirección como esta:

https://seguro.ejemplo.com

La "s" indica al navegador que se va a utilizar una conexión segura y ésta se hace por medio del puerto 443, el cual es el default para HTTPS/SSL.

Ahora bien, si no configuras nada más en tu Sitio Web y alguien teclea esta dirección:

http://seguro.ejemplo.com

notarás que todavía se puede acceder a tu aplicación, pero se está accediendo sin utilizar la seguridad que provee el certificado, lo cual es incorrecto. Lo más recomendable es indicarle a IIS que force la comunicación segura.

Para esto, abre las propiedades de tu Sitio Web en IIS y en la pestaña Directory Security, bajo el título Secure Communications oprime el botón Edit.

Ahora marca la opción Require Secure Channel (SSL) y marca también la opción Require 128-bit encryption si tu Certificado es de 128 bits.

SSL

Listo, ahora si intentas entrar a:

http://seguro.ejemplo.com

verás que el navegador te envía el siguiente error:

The page must be viewed over a secure channel
The page you are trying to access is secured with Secure Sockets Layer (SSL).
--------------------------------------------------------------------------------

Please try the following:

Type https:// at the beginning of the address you are attempting to reach and press ENTER.
HTTP Error 403.4 - Forbidden: SSL is required to view this resource.
Internet Information Services (IIS)