MVC Exportar Datos a .XLS “Excel Files”

Este truco es uno de los top10 en los foros de MSDN y sigue siendo una de aquellas cosas que no es fácil encontrar una documentación clara y adecuada.

Si hablamos desde la perspectiva de ASP.NET MVC esta tarea se nos simplifica muchísimo porque desde nuestro controlador podemos devolver directamente el contenido de un fichero como cualquier otro ActionResult que tengamos configurado. Para eso tenemos el método File que nos proporciona esa funcionalidad y no tenemos que utilizar directamente el objeto Response como nos pasaba con el clásico ASP.NET WebForms.

FileContentResult File(byte[] fileContents, string contentType)
FileContentResult File(byte[] fileContents, string contentType, string fileDownloadName)
FileStreamResult File(Stream fileStream, string contentType)
FileStreamResult File(Stream fileStream, string contentType, string fileDownloadName)
FilePathResult File(string fileName, string contentType)
FilePathResult File(string fileName, string contentType, string fileDownloadName)

Para este ejemplo utilizaré la sobrecarga que retorna un FileStreamResult porque lo que queremos hacer es:

Un servicio que recupere los datos de nuestro repositorio, serialice nuestra entidad del dominio en un XML directamente en memoria. Devuelva su contenido especificando que es un fichero Excel y el nombre del fichero que se utilizará para guardar.

Todo esto lo generará dinámicamente en memoria sin tener que tener el fichero Excel físicamente en nuestro servidor. Sigue leyendo

Anuncios

Deserializar JSon a tipo anónimo .Net

En ciertas ocasiones podemos necesitar deserializar un objeto pasado desde un cliente en formato JSon a un tipo .net anónimo. Por ejemplo si utilizas MongoDB con el driver NORM y pretendes filtrar u ordenar de una manera dinámica, es difícil pasar estos objetos a la query para poder generar un filtro dinámico.

Para hacernos una idea esta sería una consulta paginada y  con un filtro sencillo con NORM:

//NoRM anonymous objects:
return GetRepository().GetCollection("Personas")
   .Find(
          new { Nombre = Q.IsNotNull() }, //Where
          new { Fecha = OrderBy.Descending }, //OrderBy
          10, // Nº elementos de la secuencia "Skip"
           0 // Primer elemento de la secuencia "Take"
);

Esta consulta nos devolvería las 10 primeras personas con Nombre que no sea null. Sigue leyendo

Error en IIS BadImageFormatException

Subiendo una aplicación web al servidor me encontré con un error muy raro y que hasta el momento no me había pasado nunca.

Error System.BadImageFormatException !!!

La página del error en el IIS es:

error

La aplicación hasta ese momento estaba funcionando y después de añadirle un nuevo ensamblado  Masivos.Application.Interfaces dejó de funcionar. Lo curioso es que en el servidor de desarrollo funcionaba perfectamente, pero en el servidor de Pre no había manera que funcionara. Sigue leyendo

Actualizar-Generar certificado Web SSL en IIS 7

Estos días me a tocado renovar nuestro certificado SSL con el proveedor thawte y como no existe mucha información he decidido crear un mini tutorial explicando los pasos necesarios para realizar este mantenimiento. Para versiones anteriores del IIS podéis acceder a http://support.microsoft.com/kb/295281/es .

Para empezar aclararemos que con IIS7 es mucho más fácil renovar o generar el certificado, pero si no estas familiarizado con el panel de control es posible que te cueste un poco encontrar las opciones.

Comencemos:

1º Generar el fichero CSR

Tanto para generar un nuevo certificado como para renovarlo es probable que nos pidan un fichero para la solicitud de firma (.CSR) “dependiendo del proveedor”. Para esto tendremos que ir al panel de control de nuestro IIS. Seleccionar el servidor y en el apartado de seguridad seleccionar los certificados existentes.

Obtendremos la lista de certificados instalados en el servidor. Y seleccionamos la opción que necesitemos, en mi caso crear solicitud de certificado para generar el fichero CSR.

Rellenamos todos los campos:

  • Nombre común: “Muy Importante” Nombre del dominio completo o URL. Por ejemplo, un certificado SSL emitido por “www.tuEmpresa.com” no será válido para “secure.tuEmpresa.com”. Si la dirección Web que se utilizará para SSL es “secure.tuEmpresa.com,” garantizar que el nombre común presentada en la RSE es “secure.tuEmpresa.com”.  Para todos los subdominios puedes utilizar el * por ejemplo, “*. tuEmpresa.com” o “www *. tuEmpresa.com”.
  • Organización: Nombre de la empresa.
  • Unidad Organizativa: Departamento encargado del soporte por ejemplo “Departamento web”.
  • Ciudad o Localidad: Ciudad de contacto de la empresa.
  • Estado o Provincia: provincia de contacto de la empresa.
  • País o región: País de contacto de la empresa.

Seleccionar el proveedor de servicios criptográficos RSA 1024 bits y guardar el fichero con extensión CSR.

Se generará un fichero de este tipo “alterado ;-)”, que es el que se tiene que enviar a nuestro proveedor para generar la firma del certificado.

2º Instalar el Certificado en el servidor

Una vez que nuestro proveedor haya aceptado nuestro certificado web SSL ya lo podemos instalar en nuestro servidor web.

Nos pueden enviar el fichero o el texto del certificado, si es así tan sólo tenemos que generar un fichero de texto pegar el contenido y modificar la extensión por .CER para tener preparado el certificado para su instalación.

Volvemos al panel de control del IIS –> certificados –> completar solicitud de certificado.

Buscamos el fichero y lo añadimos a la lista de certificados del servidor.

3º Configurar nuestro sitio web HTTPS

Si estamos configurando un nuevo sitio tenemos que habilitar el protocolo HTTPS y si ya lo teníamos configurado solo tenemos que modificar el certificado que utilizamos en el sitio web.

Seleccionamos el protocolo HTTPS para modificar la configuración.

Seleccionamos el nuevo certificado SSL que utilizará el sitio web.

Certificado renovado o instalado con éxito !!!

Nuestro sitio web ya está utilizando el nuevo certificado SSL correctamente y ya no nos tenemos que preocupar hasta el año que viene ;-)

Espero que este mini tutorial os sea de ayuda.

Publicar Servicio WCF en un servidor compartido

Siguiendo con las ayuditas a mis rivales en el concurso Es la hora de los Puños , voy a exponer un error común que nos podemos encontrar al intentar publicar el servicio WCF en un servidor compartido, una configuración muy habitual en nuestros hostings.

El error:

Esta colección ya contiene una dirección con el esquema http. Sólo puede haber una dirección por esquema en esta colección.

image

El Problema:

El servidor web IIS solo permite una sola dirección base por esquema (HTTP) y eso para un entorno compartido es un verdadero problema, esto ya está solucionado en IIS 7.0 y framework 4.0 con el atributo multipleSiteBindingsEnabled en el elemento serviceHostingEnvironment.

Posible solución para versiones anteriores:

Para poder hospedar un servicio WCF con un extremo web en un servidor IIS hay que especificar  la clase WebServiceHostFactory en el archivo .svc

<ServiceHost Language="C#" Debug="true" Service="KillBits.Fight"
CodeBehind="Fight.svc.cs" Factory="System.ServiceModel.Activation.WebServiceHostFactory" >

O en el fichero de configuración estableciendo el binding webHttpBinding Sigue leyendo

ASP.NET CODEBARS

En el foro de MSDN han consultado como poder  generar códigos de barra en una aplicación ASP.NET, yo hace bastante tiempo hice un ejemplo para una aplicación windows utilizando unas fuentes True Type para este menester y ahora haré lo mismo pero para una aplicación web.

El artículo original para Windows lo podéis encontrar en la web del guille en http://www.elguille.info/colabora/NET2006/Marckys_BarCode.htm .

Lo primero que voy a hacer es un proyecto web con una simple página donde podré introducir los datos para generar el código de barras y una combo para seleccionar las fuentes que me darán los diferentes formatos de código de barras.

La idea de esta utilidad es mostrar los datos en un formato de código de barras y la opción que he considerado más oportuna es generar una imagen con este texto y mostrarlo en la web como un simple control de servidor image de toda la vida.

Para poder realizar esto si tenernos que complicar muchísimo la vida. Lo mejor es crear un http handler que nos genere esta imagen y la muestre en el control.

Que es un HttpHandler ??

Pues un manejador de las solicitudes http que implementa la interface IHttpHandler y nos puede servir tanto para interceptar las llamadas de un fichero con una extensión en particular como para llamarlo directamente, como va a ser nuestro caso. Sigue leyendo