Fechas en inglés en WebServices

Quizás habéis visto que las fechas que son devueltas por un WebService de NAV en formato texto y que han sido convertidas a través de FORMAT(fecha) vienen en el formato MM/DD/YYYY en vez de DD/MM/YYYY.

La solución es muy sencilla: Abrid el cliente de roles utilizando el mismo usuario que utiliza vuestro WebService. Una vez dentro poned el idioma a español y salid. Con esto, se modificará un registro en la tabla 2000000073 (User personalization) donde queda guardado el idioma que utiliza el usuario. Después de esto, hay que reiniciar el servicio NAV Business Web Services.

Si después de esto, todavía sigue sin aparecer correctamente, hay que verificar que en la carpeta C:Program Files (xxx)Microsoft Dynamics NAV60Service no sólo tenemos el idioma ENU. Para instalar más idiomas, hay que buscar en el DVD de NAV la ruta InstallersESServer y ejecutar el instalador. Por último, como no, hay que volver a reiniciar el servicio.

ACTUALIZACIÓN: No recomiendo reiniciar los servicios de NAV. Es mejor parar los dos servicios de tercera capa y volver a arrancarlos.

Asignación de credenciales para acceder a servicios web

Hace un par de semanas tuve un pequeño problema cuando intentaba acceder a un servicio web publicado en NAV. Disponía de mis desarrollos en asp.net en una máquina virtual con un dominio distinto al servidor donde se encontraba NAV. Por lo tanto, tenía que indicarle de alguna manera el usuario, password y dominio que tenía que utilizar la aplicación web para conectarse. En varios sitios encontré que había que utilizar la siguiente linea de código antes de hacer la llamada a la función del servicio web:

someService.Credentials = new NetworkCredential(“user”, “password”, “domain”);

Hay que recalcar que el último parámetro es optativo pues no es necesario indicarlo cuando el servidor se ubique en el mismo dominio. En mi caso, por encontrarme en un dominio distinto, lo indiqué.

Bien, la aplicación web se conectaba sin problemas y llegados a ese punto me olvidé del tema de las credenciales. Cuando la aplicación web estaba terminada, la publiqué en el servidor definitivo que sí que se encontraba en el mismo dominio y mi sorpresa fue ver que no había forma humana de que funcionara. Constantemente obtenía un error 401 – No autorizado.

La solución: la verdad es que hice bastantes pruebas pero creo que lo hizo que funcionara fue quitarle el parámetro del dominio a la función que otorga las credenciales. A mi entender, no tiene mucho sentido que un método de autenticación falle cuando se le proporciona mas información de la que necesita. En todo caso debería ignoraría pero nunca dar error (y menos si es tan poco descriptivo).

La importancia del nombre

Hoy he tenido una batalla con la instalación de los servicios de tercera capa de NAV 2009. Resulta que había que replicar un entorno real de aplicación con acceso a NAV a través de Microsoft Dynamics NAV Business Web Services. Después de restaurar una copia de la BBDD, replicar la aplicación y cambiar el puerto de la ruta de acceso al Web Service, me he dispuesto a crear una nueva instancia del servicio Microsoft Dynamics NAV Business Web Services. En varios foros he encontrado que la forma rápida de hacerlo consistía en duplicar la carpeta donde se encuentran los servicios de tercera capa de NAV, modificar el archivo *.config para indicarle los nuevos puertos que se van a utilizar e instalar nuevos servicios. El problema ha venido cuando, después de instalar los nuevos servicios y arrancarlos, el que en teoría tenía que ser el servicio Microsoft Dynamics NAV Business Web Services se arrancaba como un Microsoft Dynamics NAV Server. Con lo cual las dos instancias que se estaban creando eran de Microsoft Dynamics NAV Server y al arrancar la segunda daba error pues decía que el puerto utilizado ya estaba siendo utilizado. Después de muchas, muchas pruebas he dado con la siguiente página que me ha resuelto todas las dudas. En ella se explica las 4 ó 5 claves que hay que tener en cuenta a la hora de instalar los servicios y da 2 ejemplos perfectos para copiar y pegar. Después de esto, todo ha ido como la seda. En resumen lo que viene a decir la página es:

  • Lo que define si el servicio que se está creando es “Microsoft Dynamics NAV Server” o “Microsoft Dynamics NAV Business Web Services” es el nombre del servicio. Si el servicio empieza por “MicrosoftDynamicsNAVWS” estaremos instalando una instancia de “Microsoft Dynamics NAV Business Web Services”. Cualquier otra cosa, se tratará de uns instancia de “Microsoft Dynamics NAV Server”.
  • Ofrece dos ejemplos de lo que tiene que ser la línea de comandos idónea para instalar los servicios:
  1. SC CREATE “MicrosoftDynamicsNAV$Svr2” binpath= “C:Program FilesMicrosoft Dynamics NAV60Service2Microsoft.Dynamics.Nav.Server.exe” DisplayName= “MSSvr2”
  2. SC CREATE “MicrosoftDynamicsNAVWS$Svr2″ binpath= “C:Program FilesMicrosoft Dynamics NAV60Service2Microsoft.Dynamics.Nav.Server.exe $Svr2” DisplayName= “MSWSSvr2” type= share