lunes, 23 de enero de 2012

Publicando Sql Server Ce 4 con Entity Framework en un hosting compartido

Aunque he publicado anteriormente entradas sobre este mismo tema, lo cierto es que nunca había publicado un sitio web en un hosting compartido que, además de utilizar Sql Server Ce 4, utiliza también Entity Framework.

Recientemente he tenido que desarrollar un proyecto con estas características y me ha parecido oportuno escribir un pequeño resumen de ineludibles pasos que hay que completar si queremos ver funcionar este particular binomio en un entorno de hosting compartido.

Para este post asumo que tienes un sitio web (no confundir con aplicación web) que utiliza Sql Server Ce 4 y Entity Framework y que funciona correctamente en tu máquina local.

Partiendo de esta base, será necesario realizar cambios tanto en tu proyecto local como cambios en el servidor de publicación.

Los pasos a completar en tu proyecto local son los siguientes:

  • Eliminar la referencia al ensamblado System.SqlServer.Ce que está apuntado al GAC. Esto es porque no podemos asumir que en el servidor de despliegue esté instalado Sql Server Ce 4.
  • Copiar en el directorio Bin todo el contenido de la carpeta C:\Program Files\Microsoft SQL Server Compact Edition\v4.0\Private
  • Agregar el siguiente código al fichero web.config de la raíz del sitio web

  <runtime>

    <assemblyBinding appliesTo="v2.0.50727" xmlns="urn:schemas-microsoft-com:asm.v1">

      <dependentAssembly>

        <assemblyIdentity name="System.Data.SqlServerCe" publicKeyToken="89845dcd8080cc91" culture="neutral"/>

        <bindingRedirect oldVersion="4.0.0.0-4.0.0.1" newVersion="4.0.0.1"/>

      </dependentAssembly>

    </assemblyBinding>

  </runtime>

 

  <system.data>

    <DbProviderFactories>

      <remove invariant="System.Data.SqlServerCe.4.0"/>

      <add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>

    </DbProviderFactories>

  </system.data>

 

En este momento tu proyecto en local debería seguir funcionando con normalidad y no percibir el cambio realizado.

Los pasos a completar en el servidor del hosting compartido son los siguientes:

  • Conceder permisos de “Modificar” en el directorio App_Data a la cuenta Plesk IIS WP User (IWAN_plesk(default))
  • Conceder permisos de “Modificar” en el directorio Bin a la cuenta Plesk IIS WP User (IWAN_plesk(default))

En realidad, la cuenta de usuario a la que hay que conceder los permisos es la cuenta que este utilizando el worker process de ASP.NET. En mi caso y utilizando el panel de control Parallels Plesk Panel, la cuenta de usuario predeterminada es la anteriormente citada.

Cómo ultimo tip, te diré que cuando todo esté funcionando y quieras volver a publicar tu aplicación, lo más seguro es que ciertos ensamblados de Sql Server Ce estén bloqueados por el proceso w3wp.exe y no se permite la sobreescritura de los mismos. Asumiendo que no puedes ni reiniciar el grupo de aplicaciones ni tampoco el servidor web (la única solución que desbloqueará los mencionados ficheros), la única solución digna que he encontrado es no copiar en siguientes publicaciones todos los directorios y ficheros que copiamos en el directorio Bin para que funcionara correctamente Sql Server Ce 4.

En cualquier caso y a partir de aquí, ya puedes utilizar felizmente Sql Server Ce 4 y Entity Framework en tu hosting compartido, sin preocuparte si está o no instalado Sql Server Ce en el servidor.

Un saludo!

No hay comentarios:

Publicar un comentario