viernes, 22 de junio de 2012

La tabla externa no tiene el formato esperado. System.Data.OleDb.OleDbException

Problema

   1: Se detectó System.Data.OleDb.OleDbException



   2:   HResult=-2147467259



   3:   Message=La tabla externa no tiene el formato esperado.



   4:   Source=Microsoft JET Database Engine



   5:   ErrorCode=-2147467259



   6:   StackTrace:




Diagnóstico



En mi caso este error lo recibí por no utilizar el provider correcto en driver. Estoy utilizando un archivo de Excel versión 2010 con extensión “xlsx” y el driver está referido a versión antigua “xls”





   1: <add name="ExcelConnectionString"



   2:       connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\archivo.xls;Persist Security Info=False;Extended Properties=&quot;Excel 8.0;HDR=YES&quot;"



   3:       providerName="System.Data.OleDb" />




Solución



Cambiar el provider y en la cadena de conexión a Excel.





   1: <add name="ExcelConnectionString" 



   2:      connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:\archivo.xlsx;Persist Security Info=False;Extended Properties=&quot;Excel 12.0 Xml;HDR=YES;IMEX=1&quot;" 



   3:      providerName="System.Data.OleDb"/>




Nota: debe tener instalados los drivers correctos en su máquina, claro.



Etiquetas de Technorati: ,

martes, 5 de junio de 2012

The constructor to deserialize an object of type ‘[XType]' was not found

El error

   1: El código de usuario no controló System.Runtime.Serialization.SerializationException



   2:   HResult=-2146233076



   3:   Message=The constructor to deserialize an object of type 'Metis.Security.IdentityClaims' was not found.



   4:   Source=WebDev.WebHost40



   5:   StackTrace:



   6:        at Microsoft.VisualStudio.WebHost.Server.GetProcessToken()



   7:        at Microsoft.VisualStudio.WebHost.Host.GetProcessToken()



   8:        at Microsoft.VisualStudio.WebHost.Request.GetUserToken()



   9:        at Microsoft.VisualStudio.WebHost.Request.GetServerVariable(String name)




Este problema se refiere a la necesidad de implementar el constructor de serialización personalizada correspondiente.



Sin embargo, en mi caso ya está implementado el constructor y mi problema es un derivado donde el Servidor Web de Desarrollo que estaba utilizando no encontraba mi implementación.



Solución



Una vez más al estar utilizando el Servidor Web de desarrollo de Visual Estudio (WebDev.WebHost40) es necesario copiar las dll dependientes de la seguridad en el directorio correspondiente. (Ver donde en la entrada previa El tipo no está resuelto para el miembro “X”).



Alternativa



Sonrisa Una mejor alternativa, si los tiene disponibles, es utilizar IIS Express ó el IIS local, que no tienen este inconveniente, es decir no necesita copiar archivos a ningún lado.



image

martes, 15 de noviembre de 2011

El tipo no está resuelto para el miembro “X”.

El contexto

Se desarrolla un especialización para IIdentity y se establece un nuevo IPrincipal mediante GenericPrincipal con MVC3.

El síntoma

System.Runtime.Serialization.SerializationException was unhandled by user code
  Message= Type is not resolved for member 'X'.
  Source=WebDev.WebHost40

Todo bien antes de autentificarse.

image

Ingresar las credenciales

image

Horror

image

Causa poco estudiada a detalle

El problema con la serialización logré reproducirlo tanto en un sitio con Telerik (quién reportaba el error y parecía un responsable, pero nada que ver) y con un proyecto nuevo y limpio de MVC3, quién sabe por qué en mi proyecto Web antiguo (MVC2) convertido a MVC3 sí funcionaba bien.

En fin, la causa no está muy bien explicada y tiene que ver con que el Servidor Web de desarrollo de ASP.NET (WebDev.WebHost40) se ejecuta de alguna forma en la que carga el serializador por un lado (GAC) y al intentar aplicar la deserialización no encuentra el ensamblado. Por algún motivo trata de buscar el ensamblado de seguridad personalizado en otros lugares pero no el el directorio bin del propio proyecto de desarrollo.

Existen algunas soluciones alternativas recomendadas en los sitios Web

Referencia 1: Implementing a Custom Identity and IPrincipal in MVC

Referencia 2: Update on my struggles with the ASP.NET Development Server

El problema sólo sucede durante la depuración utilizando en Servidor Web de desarrollo de ASP.NET. Cuando publicas en un sitio Web de IIS no hay problemas en el encontrar el tipo.

  • Hay algunas soluciones como copiar los ensamblados relacionados a las carpetas del Net Framework correspondientes bajo Windows, pero a mí no me funcionaron.
  • Otra solución con el GAC que en ningún caso adoptaré ni lo recomiendo, además a mi tampoco me funcionó y es como volver al pasado (¡DLL HELL!).
  • Otra es personalizar completamente la serialización implementando ISerializable, es relativamente  tedioso aunque fácil, pero requiere pruebas y es absurdo en mi caso, no me gusta.

En conclusión es posible utilizar su API y publicar en los sitios de destino con IIS sin problemas.

Para poder depurar tendría que ejecutar el VS en modo administrador y cambiar el servidor Web para utilizar IIS local en las propiedades de tu proyecto.

Una solución más simple es la siguiente

Abrir en el explorador de Windows la ubicación de su servidor Web de desarrollo (WebDev.WebHost40), en mi caso:

C:\Program Files (x86)\Common Files\microsoft shared\DevServer\10.0

Copiar allí, en la raíz, sus ensamblados que están relacionados y son necesarios para ejecutar su código de seguridad, sólo se requieren los ensamblados con los métodos que se cargarán durante la ejecución de su código de seguridad. No son necesarios otros ensamblados, que aunque estén relacionados en términos de referencias, no se utilicen en la comprobación.

Listo, en mi caso funciona perfecto y sigo utilizando el servidor Web de desarrollo y Visual Studio se puede ejecutar en modo de usuario, no administrador.

Gracias por todas las respuestas anteriores que me permitieron encontrar esta solución.

Saludos,

image

sábado, 30 de julio de 2011

SharePoint. No se puede listar todos los elementos (“AllItems.aspx” ha sido reemplazado)

Al utilizar un sitio de SharePoint Server 2010 me ha sucedido algo que no habría esperado fuera posible hacer.

Origen del problema

Tome un archivo de Excel y guardé el el archivo “como…” y en vez de conectarme paso a paso a la biblioteca de documentos copié la liga completa del sitio Web y hasta una carpeta específica, es decir:

http://[mi server]/[mi sitio]/Shared%20Documents/Forms/AllItems.aspx

Lo que sucedió fue que de alguna manera se reemplazó el archivo AllItems.aspx con mi archivo de Excel. (Lamentablemente traté de reproducirlo nuevamente y no pude)

Esto produjo un error general en la página Web de la biblioteca de documentos en la que sólo aparecía en la pagina un error comentando que AllItems.aspx contenía código prohibido para ejecutarse.

Como SharePoint 2010 guarda los documentos en al base de datos, pues parecía un problema a resolver con SQL y con programación en caso de tener que extraer el contenido de los documentos desde la base de datos con algún stream writer.

Solución simple, reemplazar de nuevo el archivo AllItems.aspx con uno original

Me conecté al mismo sitio por medio del explorador de Windows con WebDav, agregando una ubicación de red.

imageimage

Esto me permitió explorar el sitio hasta encontrar un archivo AllItems.aspx original, cualquiera de lista de documentos, ya que es una archivo común.

image

Luego abrí ese archivo con Visual Studio 2010 (o Web Express) y revisé que fuera un aspx y a continuación los guarde “como… “ y anoté en la caja del diálogo la dirección completa que quería volver reemplazar, que es la de la biblioteca de documentos que no podía leer, es decir en mi caso:

http://[mi server]/[mi sitio]/Shared%20Documents/Forms/AllItems.aspx

Me preguntó si quería reemplazar el archivo existe, ..pues sí y…

listo, se corrigió el problema.

Etiquetas de Technorati:

viernes, 22 de julio de 2011

No se puede cargar el tipo 'System.ServiceModel.Activation.HttpModule'

image

Solución probada

Fuente: http://msdn.microsoft.com/es-es/library/aa751852.aspx

No se puede cargar el tipo ‘System.ServiceModel.Activation.HttpModule’ del ensamblado ‘System.ServiceModel, Version 3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089’

Este error se produce si se instala .NET Framework 4 y, a continuación, se habilita la activación HTTP de .NET Framework 3,5 WCF. Para resolver el problema ejecute la siguiente línea de comandos desde el símbolo del sistema de Visual Studio 2010:

aspnet_regiis.exe -i –enable


Resultado = OK



Etiquetas de Technorati: ,,