domingo, 16 de mayo de 2010

ASP .Net: No se ven las imágenes en ThunderBird

En las pruebas de envío de correos con ASP.NET y Visual Basic, ocurre que los mensajes se ven como se espera en GMail, Hotmail y Outlook; funciona perfectamente, sin embargo para ThunderBird el resultado es otro. Las imágenes no se observan y no es por configuración de las opciones de la aplicación.

Solución encontrada:
Había que especificar qué tipo de MIME se usa para cada imagen incrustada en el mensaje de correo con la siguiente línea de código:

Dim imageResource1 As LinkedResource = New System.Net.Mail.LinkedResource(Server.MapPath("imagenes/imagen1.jpg"), MediaTypeNames.Image.Jpeg)

Asp. Net: Tarda en llegar el mensaje de correo de GMail

Estuve averiguando por qué al enviar un mensaje de correo usando código Visual Basic .Net con ASP.Net y noté que al usar como servidor de correos una cuenta de GMail, resulta que éste ralentiza en gran medida la entrega del mensaje a su destinatario.

Y ya averigüé por qué ocurre!. El problema es que al incluir direcciones URL en el mensaje, parece que GMail analiza si esa URL existe y quién sabe qué más cosas hace; el punto es que al quitar la URL del mensaje, la entrega al destinatario se da en un tiempo muy bueno.

Asp .Net: Mantener la sessión de usuario activa.

¿Por qué se pierde la sesión de usuario y cómo lograr que permanezca todo el tiempo hasta que se cierre la sesión?

En el siguiente link encontrarán las respuestas. Sin embargo, yo implementé otra solución con ayuda de "Web Service" estático.

Más referencias:
Ésta es interesante porque lo resuelve con un HttpHandler
Ésta otra solución pero con JQuery

sábado, 1 de mayo de 2010

Asp .Net: Limitar el tamaño de la carga de un archivo

En la sección System.Web poner lo siguiente:

<httpruntime maxrequestlength="10000"></httpruntime>

Estableciendo la regla anterior en el web config de Asp.Net, se estaría indicando que el servidor web solo permite al usuario cargar archivos con una cantidad máxima aproximada de ~10 MB.

El tamaño predeterminado es de 4 MB exactos, osea 4096 KB.


Referencia: astrayalien

Asp.Net: Error con VJSharpCodeProvider y AjaxControlToolkit Resource

Al ejecutar una aplicación web aparece éste error:

Error al cargar el ensamblado con el nombre para mostrar 'AjaxControlToolkit.resources' en el contexto de enlace 'LoadFrom' de AppDomain con ID 2. Error debido a: System.IO.FileLoadException: No se puede cargar el archivo o ensamblado 'AjaxControlToolkit.resources, Version=3.0.30512.20315, Culture=es, PublicKeyToken=28f01b0e84b6d53e' ni una de sus dependencias. La definición del manifiesto del ensamblado no coincide con la referencia al ensamblado. (Excepción de HRESULT: 0x80131040)
Nombre de archivo: 'AjaxControlToolkit.resources, Version=3.0.30512.20315, Culture=es, PublicKeyToken=28f01b0e84b6d53e'
......

Y también éste error:

The assembly with display name 'VJSharpCodeProvider' failed to load in the '
LoadFrom' binding context of the AppDomain with ID 2. The cause of the failure was: System.IO.FileNotFoundException: Could not load file or assembly ...

Para solucionar el primer caso, lo que hice fue descargar el código fuente de la versión 30512 de Ajax, que en lo personal, estoy seguro que es la más estable que he utilizado. Procedí a compilarla, luego tomé el ensamblado de la carpeta Release, también copie el archivo AjaxControlToolkit.pdb para depuración. Los dos archivos los pegué en la carpeta Bin de mí proyecto ASP.Net. Desde Visual Studio 2008, y estando en la carpeta Bin, saco el menú contextual y selecciono "Agregar Referencia ..." y luego busco el ensamblado.

Para el segundo caso, resulta que se corrige instalando "
Microsoft Visual J# Version 2.0 Redistributable Package" el cual se puede descargar desde: http://www.microsoft.com/DOWNLOADS/details.aspx?familyid=F72C74B3-ED0E-4AF8-AE63-2F0E42501BE1&displaylang=en

domingo, 21 de marzo de 2010

Asp.Net: Insertar un archivo CSS en el HEAD

Alternativa para insertar una hoja de estilos en el HEAD de la página:

Dim Browser As HttpBrowserCapabilities = Request.Browser
If Browser.Type = "IE6" Then
Dim litIE6 As New Literal
litIE6.Text = "<link rel='stylesheet' type='text/css' href='Recursos/css/minaetStyle_ie6.css' />"
Page.Header.Controls.Add(litIE6)
End If

sábado, 20 de marzo de 2010

Asp.Net: Recuperar elementos del HEAD.


Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
Dim ctl As Control
For Each ctl In Page.Header.Controls

If TypeOf (ctl) Is HtmlLink Then
Dim linkTag As HtmlLink = CType(ctl, HtmlLink)
If (linkTag IsNot Nothing) And linkTag.Href.StartsWith("~/") Then
If Request.ApplicationPath = "/" Then
linkTag.Href = linkTag.Href.Substring(1)
Else
linkTag.Href = Request.ApplicationPath & "/" & _
linkTag.Href.Substring("~/".Length)
End If
End If
End If
Next
End Sub


Referencia:

www.mindfly.com

domingo, 7 de marzo de 2010

Asp.Net:Encriptar cadena de conexión

Con las siguientes líneas de comando se puede hasta desencriptar la cadena de conexión que reside en el web.config de la aplicación web:

Ir a aspnet_regiis:
cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\

Para encriptar:
aspnet_regiis.exe -pef "connectionStrings" "c:\Proyectos\PruebaEncriptacion" -prov "DataProtectionConfigurationProvider"

Para desencriptar
aspnet_regiis.exe -pdf "connectionStrings" "c:\Proyectos\PruebaEncriptacion"

Donde dice
PruebaEncriptacion, es el nombre del proyecto web.

domingo, 28 de febrero de 2010

Asp.Net: Otro ejemplo para inyectar javascript.

Dim script As String = "function Update_Bitacora()
{Scroll_Pais();__doPostBack('ctl00$ContentPlaceHolder1$gridBitacora','Modificar$0')}"
ClientScript.RegisterStartupScript(Me.GetType(), "UpdatePanel2", script, True)

El botón está oculto en la página y una ventana que se abre con window.open tiene un botón que llama a la función Update_Paises de la forma: window.opener.Update_Bitacora.

La sub-ventana tiene un botón "Modificar", éste realiza una operación sobre una base de datos. Una vez realizada dicha operación inyecta código javascript el cual se encarga de llamar a la función Update_Bitacora() y además despues de actualizar la bitácora, se cierra a si misma. La bitácora es un listado que está en la ventana padre.

Un punto importante es enviar el parámetro 'Modificar$0' ya que de lo contrario el evento RowCommand del GridView, no se ejecutará de ninguna manera. No es estricto enviar $0 y además se puede personalizar en caso de que se ocupe enviar otro argumento en vez de un cero.

Otra alternativa es poner un botón oculto y crear un procedimeinto con el siguiente código:

Dim btnControl As New PostBackOptions(btn)
Page.ClientScript.RegisterForEventValidation(btnControl)
Dim script As String = Page.ClientScript.GetPostBackEventReference(btnControl)
ClientScript.RegisterStartupScript(Me.GetType(), "UpdatePanel1", "function Update_Bitacora(){script}", True)

Posteriorente en la ventana hija se llama a la función que inserta el código anterior.

Referencias: aspadvice.com