jueves, 18 de septiembre de 2008

'Sys' no está definido en AJAX

Al parecer es un error muy común (vamos que me ha pasado), al montar AJAX sobre un proyecto web ya creado.

La solución la podéis encontrar en el blog de Jorge Serrano y Loring Twaits.

 

En mi caso bastó con añadir en el web.config:

<compilation debug="true">
            <assemblies>
                <add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></assemblies>
      </compilation>

<httpHandlers>
      <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
</httpHandlers>

 

<location path="ScriptResource.axd">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>

jueves, 11 de septiembre de 2008

How to: Compactar el disco duro en una máquina virtual

Alvaro Arias Conde nos explica en su blog como compactar esas dichosas máquinas virtuales que no hacen más que crecer y crecer.

De paso os podéis pasar por el blog de Enrique Blanco y Roberto González, que siempre tienen algún tema interesante que contarnos.

lunes, 8 de septiembre de 2008

Me estás eSTRESSando !!

Es lo que me ha estado diciendo el servidor de pruebas. Esa semana la hemos dedicado a probar toda la infraestructura que hemos creado para nuestro portal, no solo que no haya “petardazos”, además la hemos realizado una gran cantidad de pruebas de carga para conocer los límites del portal y descubrir posibles errores y mejoras en el código.

Antes de ponernos a realizar las pruebas, me preocupé por investigar primero ¿Cómo las debíamos hacer?, ¿Qué debemos probar? Y ¿Qué íbamos a esperar de ellas?.

Navegando un poco he encontrado una guía de Microsoft imprescindible y completísima: Improving .NET Application Performance and Scalability. Incluye recomendaciones de diseño, de programación, de configuración, nos explica cómo monitorizar el portal, cómo configurarlo, etc.. Además incluye varios checklist bastante útiles.

 

Además encontré a unos personajes muy interesantes que me proporcionaron información en sus blogs acerca de que herramientas podía utilizar, cómo utilizarlas, sus experiencias, etc.

Alik Levin’s tiene un blog muy completo sobre performance y scalability. Además de un post “Do You Really Need A Distributed Architecture?” acerca de si realmente estamos seguro de que SOA sea la mejor solución para nuestro proyecto.

Patrick Mac Kay, un experto en testear aplicaciones tiene un blog en el que nos cuenta sus experiencias, después de leerlos solo puedes decir “vaya nivel”.

 

Las herramientas que hemos utilizados han sido:

· El módulo de pruebas de Visual Studio 2008

· Web Application Stress

· Fiddler  (How to de José Manuel)

 

Como resultado, esta semana hemos conseguido los siguiente:

· Hemos encontrado pequeños errores de programación y hemos mejorado algunos módulos.

· Disponemos de la configuración necesaria para los requisitos del proyecto.

· Hemos creado nuestros check list de desarrollo para el proyecto.

· Conocemos los límites y condiciones idóneas del portal.

· Sabemos cómo monitorizarlo y cómo actuar en caso de tener problemas.

· Nos hemos divertido un rato.

 

Comentaros que este proyecto, todavía está en una de las fases iniciales, es decir no hemos esperado hasta el final para realizar las pruebas. Esto es importante en el sentido que podemos encontrar antes las “sorpresas”, vamos preparando las pruebas unitarias para futuras pruebas y podemos ir tuneando el sistema y el portal para que tenga un rendimiento aceptable en condiciones de alto consumo/uso.

viernes, 29 de agosto de 2008

ADAMProfileProvider

Ya está disponible en codeplex una primera versión del ADAMProfileProvider. Consiste en un proveedor de ASP.NET para manejar el perfil de los usuarios alojados en un ADAM.

Hasta ahora Microsoft solo nos proporciona el SqlProfileProvider basado en SqlServer, para manejar el perfil del usuario.

Con esta primera versión podremos utilizar ADAM como repositorio de la información de los usuarios, especialmente cuando utilizamos usuarios de ADAM mediante el ActiveDirectoryMembershipProvider.

El proveedor todavía no extiende todos los métodos, de momento tenemos:

Initialize
GetPropertyValues
SetPropertyValues
GetAllProfiles

Los parámetros que admite son:

connectionStringName : Nombre de la cadena de conexión con ADAM almacenada en la sección de Connectionstrings del Web.config.
Debe tener un formato similar al siguiente: LDAP://host:389/DC=Portal,DC=COM
userName : (opcional)Nombre del usuario para conectar con ADAM. En caso de indicarse debe indicarse el parámetro "password".
password : (Opcional si no se especifica userName). Password del usuario para conectar con ADAM.
attributeMapUsername : (Opcional). Atributo del ADAM que identifica el nombre del usuario. Por defecto busca en el atributo "userPrincipalName".

Un ejemplo de configuración en el web.config:

<?xml version="1.0"?>
<configuration>

<appSettings>
<!-- ... -->
</appSettings>

<connectionStrings>
<add name="ADAMConnectionString" connectionString="LDAP://localhost:389/DC=Portal,DC=COM" />
<!-- ... -->

</connectionStrings>

<system.web>


<!-- ... -->

<profile defaultProvider="ADAMProfile" enabled="true" automaticSaveEnabled="false">
<providers>
<add connectionStringName="ADAMConnectionString"
applicationName="Portal"
name="ADAMProfile"
type="ADAMComponents.ADAMProfileProvider, ADAMProfileProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6d42579a0907e649" />
</providers>
<properties>
<add name="mail" type="System.String" />
<add name="displayName" type="System.String"/>
<add name="middleName" type="System.String"/>
<add name="telephoneNumber" type="System.String"/>
</properties>
</profile>


<!-- ... -->
</system.web>

</configuration>

Fijaros que la cadena de conexión debe contener el prefijo "LDAP", el host, el puerto y la ruta inicial.

Para poder utilizarlo hay que instalarlo antes en el GAC.

En caso de producirse algún error dejará una marca en el registro de windows y lanzará una excepción.

En breve lanzaremos:

  • AzManADAMStoreRoleProvider : un rolemanager basado en AzMan sobre ADAM y con usuarios ADAM.
  • ADAMMembershipProvider : una extensión del ActiveDirectoryMembershipProvider pero permite resetear el password.

Gracias Jorge por validar el código y tus sugerencias.

jueves, 28 de agosto de 2008

Documentando con Sandcastle

¿Sirve de algo esos comentarios que ponemos en el código o sirve para entretenernos con el Intellisense?

En ocasiones nos puede ser útil documentar nuestro código y distribuirlo al equipo para que todos sean conscientes de los elementos disponibles sin tener que abrir veinte proyectos.



Sandcastle nos permite crear una ayuda tipo msdn con los elementos definidos en nuestros componentes.



Para generalo nos proporcionan varias herramientas por línea de comandos, pero lo mejor es utilizar un ejemplo "SandcastleGui.exe", que nos automatiza la creación.





Seleccionamos nuestro assembly y el fichero de comentarios, el tipo de documentación y el formato.



Para generar el fichero de comentarios de nuestro componente, simplemente entramos en las propiedades del proyecto, en "Build", marcamos "Xml documentation file". Esto hará que visual studio genere un fichero xml con todos los comentarios que hayamos puesto.




Como resultado tendremos una documentación con el siguiente formato:





Si queremos crear la ayuda en ficheros tipo chm necesitaremos tener instalado “htmlhelp workshop”, que es el módulo de Microsoft para crear ficheros “chm”.

jueves, 3 de julio de 2008

Errores al instalar Employee Portal de Dynamics NAV

Recientemente he ayudado a montar el Employee Portal sobre un wss2 contra un Microsoft Dynamics Nav 4 y me he encontrado algunos “problemillas” que parecen ser bastante comunes en este mundo.

Por lo que he podido comprobar la documentación de Microsoft sobre este producto es muy escasa, y los manuales de instalación son demasiado ligeros.

 

El primer error que me encontré al entrar al portal fue el siguiente: “No se pueden obtener los permisos necesarios”. Por supuesto este no era un error de wss2, sino del portal.

Motivo: Al parecer este error se produce cuando hemos instalado el módulo de Employee portal antes que el wss2.

Solución: Desinstalar el paquete del employee portal, después desinstalar el wss2, y después volver a instalar el wss2 y por último el paquete del employee portal.

 

Una vez conseguí que funcionara el wss2 sin problemas e instalar el NAS conseguí construir un sitio con la plantilla NEP y me encontré con el siguiente problema: “Communication error (10114): No reply received from Back End System (Time Out)

Motivo: Este error puede producirse por varias causas. El problema es se produce un Timeout en la página porque los WebParts de NEP no conseguían comunicar con el NAS.

Solución: Como puede producirse por muchos motivos, os aconsejo los siguientes pasos:

· Comprobar el log de aplicaciones del servidor y buscar errores o advertencias producidas por el Employee Portal

· Revisar los usuarios utilizados en la ejecución del wss y del NAS.

· Revisar que el NAS esté iniciado correctamente. Cuando el NAS arranca correctamente deja una marca en el log de aplicaciones de Windows.

· Revisar la configuración de seguridad de las colas MSMQ y los nombres de las colas en la configuración del NEP en Navision.

· Revisar la configuración del NEP en el Web.Config del sitio. Revisar los nombres de las colas MSMQ y la configuración del timeout.

· Revisar que hayais generado el par de claves de intercambio necesarias, y que esté arrancado el servicio de intercambio.

· En mi caso el problema estaba en era que no encontraba la dll xp_ndo.dll.

Algunos enlaces sobre el error:

http://www.mibuso.com/forum/viewtopic.php?p=39228

http://www.msdynamics.de/viewtopic.php?t=4690

 

Error "The extended stored procedure xp_ndo_enumusergroups in the library file xp_ndo.dll, is not available on the <Servername> server”.

Motivo: Navision no encuentra la dll xp_ndo.dll que necesita el cuando conecta en modo integración de Windws contra una bbdd SqlServer.

Solución: Copiar la dll al directorio bin del SqlServer. La dll la podeis encontrar en el cd de instlación en el directorio $\Sql_esp\xp_ndo.exe

Algunos enlaces sobre el error:

http://blog.configmaker.net/?p=27

 

Pero al instalarla me daba otro error más: “Error al carga xp_ndo.dll no se ha podido encontrar alguna de sus dependencias

Motivo; los procedimientos almacenados estaban registrados referenciando a la dll en un path erróneo.

Solución: Borrar los procedimientos y volver a crearlos con el path adecuado.

Algunos enlaces sobre el error y el anterior:

http://dynamicsuser.net/forums/p/11027/33937.aspx

http://www.binaryrefinery.com/main/CommentView,guid,8fbfd400-c032-4107-8ad6-4335f1714b06.aspx

http://www.binaryrefinery.com/main/CommentView,guid,8fbfd400-c032-4107-8ad6-4335f1714b06.aspx

 

En unos días os contaré mis experiencias con este producto. En breve también montaremos el Employee portal sobre un wss3 contra un Dynamics Nav 4 y después sobre un wss3 contra un Dynamics Nav 5. Ya os contaré que tal.

miércoles, 2 de julio de 2008

Errores al instalar Employee Portal de Dynamics NAV

Recientemente he ayudado a montar el Employee Portal sobre un wss2 contra un Microsoft Dynamics Nav 4 y me he encontrado algunos “problemillas” que parecen ser bastante comunes en este mundo.

Por lo que he podido comprobar la documentación de Microsoft sobre este producto es muy escasa, y los manuales de instalación son demasiado ligeros.

El primer error que me encontré al entrar al portal fue el siguiente: “No se pueden obtener los permisos necesarios”. Por supuesto este no era un error de wss2, sino del portal.

Motivo: Al parecer este error se produce cuando hemos instalado el wss2 antes que el módulo de Employee portal.

Solución: Desinstalar el paquete del employee portal, después desinstalar el wss2, y después volver a instalar el paquete del employee portal y por último el wss2.

Una vez conseguí que funcionara el wss2 sin problemas e instalar el NAS conseguí construir un sitio con la plantilla NEP y me encontré con el siguiente problema: “Communication error (10114): No reply received from Back End System (Time Out)

Motivo: Este error puede producirse por varias causas. El problema es se produce un Timeout en la página porque los WebParts de NEP no conseguían comunicar con el NAS.

Solución: Como puede producirse por muchos motivos, os aconsejo los siguientes pasos:

· Comprobar el log de aplicaciones del servidor y buscar errores o advertencias producidas por el Employee Portal

· Revisar los usuarios utilizados en la ejecución del wss y del NAS.

· Revisar que el NAS esté iniciado correctamente. Cuando el NAS arranca correctamente deja una marca en el log de aplicaciones de Windows.

· Revisar la configuración de seguridad de las colas MSMQ y los nombres de las colas en la configuración del NEP en Navision.

· Revisar la configuración del NEP en el Web.Config del sitio. Revisar los nombres de las colas MSMQ y la configuración del timeout.

· Revisar que hayais generado el par de claves de intercambio necesarias, y que esté arrancado el servicio de intercambio.

· En mi caso el problema estaba en era que no encontraba la dll xp_ndo.dll.

Algunos enlaces sobre el error:

http://www.mibuso.com/forum/viewtopic.php?p=39228

http://www.msdynamics.de/viewtopic.php?t=4690

Error "The extended stored procedure xp_ndo_enumusergroups in the library file xp_ndo.dll, is not available on the <Servername> server”.

Motivo: Navision no encuentra la dll xp_ndo.dll que necesita el cuando conecta en modo integración de Windws contra una bbdd SqlServer.

Solución: Copiar la dll al directorio bin del SqlServer. La dll la podeis encontrar en el cd de instlación en el directorio $\Sql_esp\xp_ndo.exe

Algunos enlaces sobre el error:

http://blog.configmaker.net/?p=27

Pero al instalarla me daba otro error más: “Error al carga xp_ndo.dll no se ha podido encontrar alguna de sus dependencias

Motivo; los procedimientos almacenados estaban registrados referenciando a la dll en un path erróneo.

Solución: Borrar los procedimientos y volver a crearlos con el path adecuado.

Algunos enlaces sobre el error y el anterior:

http://dynamicsuser.net/forums/p/11027/33937.aspx

http://www.binaryrefinery.com/main/CommentView,guid,8fbfd400-c032-4107-8ad6-4335f1714b06.aspx

http://www.binaryrefinery.com/main/CommentView,guid,8fbfd400-c032-4107-8ad6-4335f1714b06.aspx

En unos días os contaré mis experiencias con este producto. En breve también montaremos el Employee portal sobre un wss3 contra un Dynamics Nav 4 y después sobre un wss3 contra un Dynamics Nav 5. Ya os contaré que tal.