Elise - A Responsive Blogger Theme, Lets Take your blog to the next level using this Awesome Theme

This is an example of a Optin Form, you could edit this to put information about yourself or your site so readers know where you are coming from. Find out more...


Following are the some of the Advantages of Opt-in Form :-

  • Easy to Setup and use.
  • It Can Generate more email subscribers.
  • It’s beautiful on every screen size (try resizing your browser!)

27/4/2014

// // Comentar

{Windows 8.1} Permitir conexiones entrantes desde otros equipos

Por defecto Windows 8.1 no permite conexiones entrantes desde otros equipos debido a una regla existente en el firewall y si intentamos hacer ping a un equipo con Windows 8.1 nos devolverá el mensaje

Tiempo de espera agotado para esta solicitud

Lo que hay que hacer para permitir las conexiones entrantes es ir al Firewall de Windows -> Configuración avanzada y habilitar la regla de entrada Archivos e impresoras compartidos (petición eco: ICMPv4 de entrada)  tal como se muestra la imagen

Habilitar Regla Firewall Windows

Aunque hay mas opciones disponibles con el mismo nombre, hay que habilitar según el tipo de conexión que se desea.

Fuente: http://www.sysprobs.com/how-to-enable-ping-reply-response-in-windows-8-simple-steps
Leer post completo

25/4/2014

// // Comentar

[AZURE SDK] No se pueden publicar aplicaciones en VS 2012 después de instalar el SDK de Azure

Luego instalar el Azure SDK para Visual Studio 2012, al momento de querer publicar una aplicación web en el IIS el Visual Studio muestra el siguiente error:

Error    44    The "ImportParametersFile" task failed unexpectedly.
System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Web.XmlTransform, Version=1.4.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. El sistema no puede encontrar el archivo especificado.

Al parecer esto se da por que la instalación esta haciendo conflicto con una extensión instalada previamente, se trata de ASP .NET and Web Tools.

Para resolver este problema solo hay que reinstalar la extensión nuevamente y podremos publicar sin ningún problema.

WebTools

Si tienen este mismo inconveniente ya saben que hacer.

Leer post completo

3/4/2014

// // Comentar

ASP .NET MVC - Aumentar el tamaño máximo permitido para serializar en formato JSON

Introducción


Al usar JSON como formato de transferencia de nuestros datos desde el controlador e intentar enviar un volumen considerable de datos, podríamos tener un error como el siguiente:

Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property.

Esto se da debido que el tamaño máximo para la serialización tiene un tope configurado en la propiedad maxJsonLength que se usa para enviar la información en formato JSON.

Cambiando el valor máximo permitido


Para resolver el problema podríamos intentar cambiando el archivo de configuración de nuestra aplicación así:
<system.web.extensions>
  <scripting>
    <webServices>
      <jsonSerialization maxJsonLength="50000000"/>
    </webServices>
  </scripting>
</system.web.extensions>


Pero curiosamente esta configuración no hace efecto en los resultados que deseamos, el motivo de esto se encuentra como nota en la documentación de la propiedad, donde indica que solo se usa para instancias internas, así que toca modificar por otro lado, para lo cual tenemos 2 opciones:

Asignar un valor a la propiedad.


Si normalmente devolvemos la data de esta manera:

return Json(data, JsonRequestBehavior.DenyGet); 

Deberíamos cambiar a esto:

var jsonResult = Json(data, JsonRequestBehavior.DenyGet);
jsonResult.MaxJsonLength = int.MaxValue;
return jsonResult; 

Si nos fijamos al inicio la propiedad tiene valor nulo, así que al asignarle el valor que deseamos como tope para la serialización se va a poder enviar la data sin ningún problema.

Sobrescribir el controlador base


El método Json esta implementado en la clase Controller, que es la clase base de la cual heredan todos los controladores, si necesitamos hacer el cambio para todo nuestro proyecto podemos crear un controlador base que herede de esta clase y nuestros controladores hacerlos heredar de esta nueva clase o si lo deseamos para un controlador especifico solo podemos sobrescribir el método dentro de nuestro controlador de la siguiente manera:

protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding, JsonRequestBehavior behavior)
{
    return new JsonResult()
    {
        Data = data,
        ContentType = contentType,
        ContentEncoding = contentEncoding,
        JsonRequestBehavior = behavior,
        MaxJsonLength = Int32.MaxValue
    };
}

Con esto ya no tendríamos el error mencionado inicialmente, podrían cambiar el Int32.MaxValue por algún valor entero que deseen que se restrinja.
Leer post completo

29/1/2014

// // Comentar

ASP .NET MVC - Mostrar mensajes de validación de controles en HTML


Introducción


En ASP .NET MVC tenemos un diccionario llamado Model State que almacena los errores de validación que se puedan generar al enviar los datos de un formulario y estos se puedan mostrar al usuario a través de una key que los identifica, pues bien el detalle de esto es que mostrara los mensajes como simple texto y para una necesidad en particular se puede requerir que estos mensajes se muestren en HTML, para ello describo en este post como lograrlo.


Creación de la clase helper


Para mostrar los mensajes de validación en HTML crearemos un helper para lo cual tomaremos como referencia el mismo código fuente de ASP .NET MVC que esta disponible en Codeplex y le haremos algunas modificaciones para lograr nuestro objetivo.

La clase que usaremos para adaptarla a nuestras necesidades será ValidationExtencion.cs de la cual tomaremos los siguientes métodos:
 
public static MvcHtmlString ValidationMessage(this HtmlHelper htmlHelper, string modelName, object htmlAttributes)




 




public static MvcHtmlString ValidationMessage(this HtmlHelper htmlHelper, string modelName, string validationMessage, IDictionary<string, object> htmlAttributes)




 




private static MvcHtmlString ValidationMessageHelper(this HtmlHelper htmlHelper, ModelMetadata modelMetadata, string expression, string validationMessage, IDictionary<string, object> htmlAttributes)




 




private static FieldValidationMetadata ApplyFieldValidationMetadata(HtmlHelper htmlHelper, ModelMetadata modelMetadata, string modelName)




 




private static string GetInvalidPropertyValueResource(HttpContextBase httpContext)




 




private static string GetUserErrorMessageOrDefault(HttpContextBase httpContext, ModelError error, ModelState modelState)





Además de estos métodos de los cuales modificaremos algunos también agregaremos un método, debido a que en ASP .NET MVC esta declarado como interno y no podemos usarlos desde el helper, lo creamos dentro del mismo helper:



 




public static MvcHtmlString ToMvcHtmlString(this TagBuilder builder, TagRenderMode renderMode)







Modificación de métodos



Una vez copiados los métodos a la clase que será nuestro helper, debe quedarnos similar a la imagen siguiente


 




 


Primero hay que renombrar el método ValidationMessage para que se llame ValidationMessageHTML que será así como lo llamaremos desde nuestras vistas.


 


Ahora  el método principal que debemos hacer los cambios es ValidationMessageHelper, dentro de este método cambiamos la línea








FormContext formContext = htmlHelper.ViewContext.GetFormContextForClientValidation();






por


 




FormContext formContext = htmlHelper.ViewContext.ClientValidationEnabled ? htmlHelper.ViewContext.FormContext : null;




 


Esto, debido a que se están usando métodos internos de ASP .NET MVC y no los tenemos disponibles en nuestra clase.


 


También cambiamos la línea principal donde hará que el texto lo devuelva en HTML.


 




builder.SetInnerText(GetUserErrorMessageOrDefault(htmlHelper.ViewContext.HttpContext, modelError, modelState));




por


 




builder.InnerHtml = GetUserErrorMessageOrDefault(htmlHelper.ViewContext.HttpContext, modelError, modelState);




 


Con estos cambios aplicados a los métodos ya podemos hacer uso del helper para que nos muestre los mensajes de error en HTML, simplemente llamándolo de la siguiente manera:








@Html.ValidationMessageHTML("keyerror", new { @class = "field-validation-error-html" })






Les dejo la clase helper que muestro en el post para que la puedan usar directamente.





Leer post completo

8/6/2012

// // Comentar

Validar complejidad de claves de lado del cliente en ASP .NET

Muchas veces necesitamos en nuestros desarrollos obligar a que el usuario ingrese una clave con cierto nivel de complejidad por razones de seguridad, en este post, detallaré una forma fácil de poder implementar esto en una aplicación ASP .NET de lado del cliente, no solo validando que la clave sea compleja, sino que también indicando el nivel de complejidad mientras va escribiendo.

image

Introducción

Para poder ejemplificar esto, vamos a crear un formulario de cambio de clave, el cual tendremos estructurado como la imagen anterior, no consideraremos el código para hacer la validación de la clave anterior o el cambio de clave, únicamente nos centraremos en validar la complejidad de la nueva clave e indicarle esto al usuario.

Mostrando el nivel de complejidad

Para realizar esto, recurriremos al control PasswordStrength del Ajax Control Toolkit que nos permitirá establecer algunos parámetros de complejidad que vamos a requerir para la clave y según estos parámetros y criterios definidos nos irá mostrando en pantalla el nivel de complejidad que tiene la clave que estamos escribiendo.

<asp:TextBox runat="server" ID="txtNuevaClave" TextMode="Password" ValidationGroup="Enviar" />
<act:PasswordStrength ID="txtNuevaClave_PasswordStrength" runat="server" 
    Enabled="True" MinimumNumericCharacters="1" PrefixText="Complejidad: " 
    TargetControlID="txtNuevaClave" TextStrengthDescriptions="Baja;Media;Alta" 
    MinimumLowerCaseCharacters="1" PreferredPasswordLength="6" 
    RequiresUpperAndLowerCaseCharacters="True">
</act:PasswordStrength>

Este código nos permitirá ver el efecto que se aprecia en la imagen anterior al momento de digitar la nueva clave, para lo cual necesitamos configurar algunas propiedades:


MinimumNumericCharacters – Esto nos indica como mínimo cuantos caracteres numéricos debe tener la clave.
PrefixText – Es el prefijo que ira al momento de mostrarse la complejidad de la clave.
TargetControlID – Es el control al cual estará asociado esta validación.
TextStrengthDescriptions – Es la descripción que tendrán los distintos niveles de seguridad que consideremos, separados por ponto y coma.
MinimumLowerCaseCharacters – Esto nos indica como mínimo cuantos caracteres en minúscula se debe considerar, pero necesita de la propiedad RequiresUpperAndLowerCaseCharacters para tener efecto.
PreferredPasswordLength – Esto nos indica el tamaño mínimo requerido para considerar la clave en el ultimo nivel de validación, en el caso del ejemplo “Alta”, tener en cuenta que esto solo sirve para evaluar el nivel de complejidad, pero no valida el TextBox que tenga como mínimo esta cantidad de dígitos.
RequiresUpperAndLowerCaseCharacters – Esta propiedad sirve para activar las propiedades de mínimo minúsculas y mayúsculas requeridas.


Con esta configuración mínima, estamos pidiendo una clave que tenga al menos 6 dígitos, con una minúscula y un numero al menos.


Validando el nivel del complejidad


Ya anteriormente hicimos que se muestre el nivel de complejidad de una clave según los parámetros establecidos, pero esto no realiza una validación al momento de enviar estos datos, simplemente nos indica la complejidad que tiene lo que vamos escribiendo.


Entonces para validar la clave, haremos uso del control RegularExpressionValidator que si nos permitirá realizar esta validación con una expresión regular.



<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" 
    ControlToValidate="txtNuevaClave" 
    ErrorMessage="La clave debe ser como minimo de 6 digitos y al menos un número" 
    ForeColor="Red" 
    ValidationExpression="(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{6,12})$" 
    ValidationGroup="Enviar">**</asp:RegularExpressionValidator>
<act:ValidatorCalloutExtender ID="RegularExpressionValidator1_ValidatorCalloutExtender" 
    runat="server" Enabled="True" TargetControlID="RegularExpressionValidator1">
</act:ValidatorCalloutExtender>

Aquí tenemos el control con extender del Ajax Control Toolkit agregado para que muestre el mensaje de forma mas amigable.


En este control básicamente configuramos el mensaje que debe mostrarse y la expresión regular que hará la misma validación de mínimo 6 caracteres alfanuméricos.


image


Con esto logramos exigirle al usuario un cierto nivel de complejidad para su clave y también indicarle el nivel de complejidad que va teniendo el texto que va digitando de una forma muy intuitiva.


Espero les sea de utilidad y si pueden aportar con otras formas alternativas, pues bienvenido.

Leer post completo

11/4/2012

// // 3 comentarios

Publicación de aplicaciones ASP .NET con Informes en Microsoft Reporting

Si tenemos una aplicación web desarrollada en ASP .NET en la cual hemos creado reportes usando Microsof Reporting al momento de publicarlo en un servidor web nos va a pedir las librerías necesarias para ejecutarlo que son las siguientes:

  • Microsoft.ReportViewer.Common.dll
  • Microsoft.ReportViewer.WebForms.dll
  • Microsoft.ReportViewer.ProcessingObjectModel.dll

Estas librerías las podemos adjuntar en la carpeta bin de nuestra aplicación, siendo así, con las 2 primeras librerías no tendremos problema, ya que si vemos la referencia agregada en nuestro proyecto nos daremos cuenta que se encuentran en la ruta:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\

Pero la última no figura en esa ruta, y si no lo copiamos con el proyecto, tendremos un error del tipo:

could not load file or assembly 'microsoft.reportviewer.processingobjectmodel version=10.0.0.0

Por este motivo es que se requiere, lo bueno es que si encuentra pero está registrada en el GAC, por lo que tendremos que copiarla de ahi, en esta ocasión les comparto una forma de hacerlo:

Copiarlo vía consola DOS


  1. Abrir la consola DOS (Presione Windows + R, luego escribir cmd y aceptar)
  2. Escribir el siguiente comando: cd C:\WINDOWS\assembly\GAC_MSIL\Microsoft.ReportViewer.ProcessingObjectModel
  3. Escribir el comando dir para listar los directorios que representan a las versiones para poder seleccionar la adecuada a nuestra aplicación, tendremos una lista similar a la que muestra la Figura 1.
  4. Escribimos el comando cd versionNumber, donde versionNumber representa una de las versiones que visualizamos en el comando anterior (ejemplo cd 10.0.0.0__b03f5f7f11d50a3a) presionamos enter y luego escribir el comando dir y deberíamos visualizar la librería que estamos buscando.
  5. Por ultimo solo nos queda copiar la librería en algún directorio, para ello escribimos el comando copy *.dll D:\Lib.
Figura 1: Lista de versiones de libreria de Microsoft Reporting

Con esto ya tendremos la última librería que podremos adjuntar a nuestra aplicación y poder visualizar los informes.

Espero les sea de utilidad.

 
Leer post completo

28/12/2011

// // 2 comentarios

Implementar Membership Providers con Oracle y Visual Studio 2010

Hace algún tiempo atrás, escribí unos artículos sobre la implementación de Membresía (Gestión de Usuarios, Roles y Perfiles) en ASP .NET 2.0 haciendo uso de proveedores de ASP .NET y los controles específicos para estas tareas comunes, aquí pueden ver la parte 1 y la parte 2.

Ahora veremos de manera similar como implementar esto pero no usando el motor de base de datos SQL Server, sino configurar los providers para trabajar con Oracle desde Visual Studio 2010.

Requisitos:

ODAC 11.2 Release 3 (11.2.0.2.1) with Oracle Developer Tools for Visual Studio

Esto nos dará la posibilidad de usar los providers de asp .net con Oracle, ahora paso a detallar como podemos lograrlo:

Crear un nuevo proyecto

Para este ejemplo crearemos un nuevo proyecto de tipo "Aplicación Web ASP .NET" con la plantilla por defecto del Visual Studio
Configurar el proveedor de Oracle

Una vez tenemos la aplicación creada, nos vamos al archivo web.config y eliminamos los tags de:
- Membsership
- Profile
- RoleManager
Ahora abrimos la herramienta de administración de sitios de asp .net en Proyecto->Configuración de ASP .NET
Fig. 1 - Configuración de Proveedores
Nos dirigimos a la pestaña "Proveedor"  y accedemos al enlace "Seleccionar un proveedor distinto para cada característica (avanzado)", dentro de esta pantalla marcamos como Proveedor de Pertenencia a "OracleMembershipProvider" y como Proveedor de funciones  a "OracleRoleProvider", esto nos modificará nuevamente el archivo web.config, pero ya con los proveedores de Oracle.
3. Generar las tablas

Una vez configurados los proveedores de pertenencia (Membership) y funciones (Roles) tenemos que generar las tablas y todos los scripts necesarios para poder trabajar correctamente.

Cuando se instala el ODAC, al final nos indica la ruta donde se encuentran los script para ejecutarlos en nuestra base de datos, que normalmente es:

[INSTALL_PATH]\product\11.2.0\client_1\ASP.NET\SQL

En esta carpeta tenemos todos los scripts para instalar los proveedores de forma independiente así como también instalarlos todos, que es lo que mostrare en el ejemplo.

Para ello vamos a nuestro proyecto y dentro de herramientas vamos a usar la opción Ejecutar Script de SQL*Plus
Fig. 2 - Ejecutar SQL Plus
Con esto nos va a pedir la ruta donde están los scripts, así como la conexión a la base de datos donde se ejecutaran.

Fig. 3 - SQL Plus
Si aun no existe ninguna conexión, tenemos la opción de crear una nueva conexión, en la siguiente figura, donde nos mostrara las conexiones que tenemos registradas en nuestro archivo tsnames.ora del Oracle, de las cuales seleccionaremos una y le ingresamos el usuario y clave para hacer la conexión, probamos y le asignamos un nombre.
Fig. 4 - Nueva conexión

Realizado este paso, nos regresará a la figura N° 3. y en "Examinar" le asignaremos la ruta de los scripts, en este caso para crear todas las tablas y scripts usaremos el archivo "InstallAllOracleASPNETProviders.sql".
Fig. 5 - Seleccionar script

Luego ejecutamos el script y con esto ya tenemos creadas todas las tablas y script necesarios con lo que ya podemos empezar a trabajar.

Para poder hacer uso de la tablas que acabamos de crear, solo necesitamos crear una conexión a la base de datos en nuestro web.config con el nombre OraAspNetConString

Connections_Config
Fig. 6 - Cadena de conexión

 

Le agregamos el tag para eliminar la definición existente de la cadena de conexión en nuestro machine.config.

Para probar todo vamos nuevamente a la herramienta de configuración de ASP .NET y podemos configurar la seguridad, roles y usuarios como se muestra en los artículos mencionados inicialmente.

Fig. 7 - Configuración Seguridad ASP .NET
Con esto ya tenemos todo listo para trabajar en nuestra aplicación con los controles de login, espero les sea de utilidad, nos leemos el año que viene :).
Leer post completo