Wednesday, March 25, 2009

Templates Tipos Genericos Herencia

Cuando estas desarrollando software, es una consecuencia natural el uso de Templates para facilitar la construccion del codigo, ahorrar lineas repetitivas disgregadas en diferentes clases de uso final, y reducir los tiempos.

Si dentro de la construccion de tus clases solo utilizas Templates para hacer un List<String> o a lo mucho un IEnumerable<Client>, ten la plena seguridad que estas desperdiciando el uso favorable de la tecnologia que tienes en tus manos, en este caso C#, de manera irresponsable y muy probablemente estes quemando tus neuronas haciendo el laborioso COPY & PASTE por everywhere...!

Debes cambiar el rumbo, alguien debe girar el timon :)

En ese uso de siniestros Templates, dentro de la definicion de aquellas clases que heredan su comportamiento de otras clases que se han diseñado como Templates, muy probablemente te encuentres con un mensaje como este:

'TEntity' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'TEntity' in the generic type or method 'SomeClass<TEntity>'

Lo que sucede es que la clase SomeClass presenta una serie de restricciones para su normal ejecucion. Dichas restricciones se implementan con el uso de la clausula where en la definicion de la clase o en los metodos de la misma, que el arquitecto establecio en el diseño de dicha clase.

En consecuencia, al implementar la herencia de una clase que tiene dichas restricciones, solo queda ir de la mano con ella.

En terminos sencillos, tendras que establecer las mismas restricciones haciendo uso de la clausula where en la implementacion de tu nueva clase y agregar otras nuevas que creas conveniente para la construccion de la tuya.

En el caso en concreto del mensaje que te mostre anteriormente, este nos indica que el tipo generico TEntity requiere ser instanciada en alguna parte del codigo de la clase heredable.

Es decir, debes agregar esta restriccion: where TEntity : new() en tu nueva clase.

Monday, March 23, 2009

HTTP Error 404.3 Vista WCF

Cuando intentas hacer el deploy de tu WCF sobre IIS 7 del Windows Vista puede que te encuentres con este mensaje de error:

HTTP Error 404.3 - Not Found
Description: The page you are requesting cannot be served because of the Multipurpose Internet Mail Extensions (MIME) map policy that is configured on the Web server. The page you requested has a file name extension that is not recognized, and is not allowed.


Lo que sucede que es las extensiones .SVC de los EndPoint tu de WCF pues NO se encuentran activados aun para ser reconocidos como peticiones correctas en tu servicio web.

Lo unico que debes hacer es ejecutar la sentencia desde el Command Line: ServiceModelReg -i

Esta permitira que ls SVC puedan ser interpretados y resueltos como esperabas.

El ServiceModelReg se encuentra en el %Windows%\Microsoft.Net\Framework\v3.0\Windows Communication Foundation\