viernes, 15 de abril de 2011

Varios Servicios Web en un unico Servidor

Se deben de crear tantas instancias del servicio como bases de datos queremos atacar desde el web services. Para poder configurarlo de esta manera es necesario que la capa donde se encuentra instalado el servicio web y sus instancias sea la intermedia.
Creando un segundo servicio Lo primero que hay que hacer es parar los servicios instalados y hacer una copia de la carpeta Servicios que se encuentra dentro del directorio de instalación del web services de Navision: C:\Program Files (x86)\Microsoft Dynamics NAV\60\Services Y poner como nombre de la carpeta Server2 o lo que queramos. Para esto haremos lo siguiente:

  • Ir a “herramientas administrativas” y elegir servicios
  • Seleccionar “Microsoft Dynamics NAV Server” y darle STOP
  • Como ya hemos creado la copia de la carpeta services y la hemos llamado Services2 ahora hay que crear la instancia que hace referencia al servicio de la carpeta Services2.

Primero crearemos el Microsoft Dynamics Nav Server y luego el Microsoft Dynamics Nav Web Server ya que se necesitan un par de servicios por nueva base de datos un servicio web y un servicio Navision server. Para ello en la consola de comandos hay que poner lo siguiente:

sc \\ "servidor" create "nombre servicio" binpath= "ruta servicio" DisplayName= "nombre a mostar"start= "tipo arranque" type="own, shared"

En nuestro caso será de la siguiente manera:

sc \\Webservices03 create MicrosoftDynamicsNAVServer$NAV2 binpath= "C:\Program Files\Microsoft Dynamics NAV\60\Service2\Microsoft.Dynamics.Nav.Server.exe $NAV2" DisplayName= "Microsoft Dynamics NAV Server Instance 2" start= auto type= own

MicrosoftDynamicsNAV$NAV2 es para decir que va a ser una nueva instancia del mismo tipo de servicio y es necesaria en el nombre de servicio como al crear la nueva instancia. En el parámetro Type hay que poner Own

MicrosoftDynamicsNAVWS$NAV2 es una instancia del servicio para que cree el servicio web y así tener el par de servidores que necesitamos. La sintaxis para crear este servicio es la misma que para el anterior lo único es que  hay que poner en el nombre WS al final, justo antes del $, en el parámetro Type hay que poner Share

Una vez hecho esto hay que cerrar y abrir la ventana de los servicios para que aparezcan los nuevos servicios que hemos creado en este caso serian:

- Microsoft.Dynamics.Nav.Server.exe

- Microsoft.Dynamics.Nav.web.Server.exe

Configurando los servicios creados
Una vez abierta la ventana con el listado de los servicios, vamos uno de los servicios y en las propiedades en la pestaña LogOn escoger la opción this account, poner webservices@atspain, sus contraseñas y guardar. No hay que arrancar porque daría error ya que los dos MicrosoftDynamicsNavServer están tirando del mismo puerto 7046 y hay que cambiarlo junto con la instancia del servicio en el fichero CustomconfigSetting.config de la carpeta Service2. Para el servicio MicrosoftDynamicsNavWebServer no es necesario cambiar el puerto y siempre tiraremos del 7047. En el fichero CustomconfigSetting.config cambiaremos las siguientes opciones:

Add key="DatabaseServer" value="Servidor de la nueva base de datos"

Add key="DatabaseName" value="Nombre de la nueva base de datos"

Add key =”ServerInstance” value =”DynamicsNav2”

Add key="ServerPort" value="7049"

Add key="WebServicePort" value="7047"






En este caso la url sería:

http://webservices03.dominio:7047/DynamicsNAV2/ws/Services

Problemas comunes.

Error: The Microsoft Dynamics NAV Business Web Services service on Local Computer started and then stopped. Solucion: suele ocurrir cuando intentamos arrancar dos servicios que tiran contra el mismo Puerto en este caso y por configuración estándar el 7046, cambiar puerto y listo.
Error: Cuando en el explorador nos aparece lo siguiente Solución: Es un problema de acceso a la base de datos, el servicio funciona bien pero no tiene permisos de entrada a la base de datos, hay que comprobar que en la base de datos del usuario esté creado el usuario que utilizamos para conectarnos en este caso webservices y que la licencia tenga activado el granulo 91000

jueves, 14 de abril de 2011

Creación de servicios web en tres capas diferentes


El escenario que vamos a crear y configurar consta de tres capas diferenciadas en tres máquinas diferentes.


1 Escenario


  • WEBSERVICES03.ATSPAIN; Windows Server 2008 R2 Standard, están instalados los servicios web.

  • SERVSQL; Windows Server 2008 R2 Standard, es donde está instalada la base de datos

  • Clientes de Navision.

2 Creación y configuración de los servicios Web Crear una cuenta de usuario de dominio tanto para lanzar los servicios y que tenga privilegios de administrador, en este caso usuario “webservices”. No hay problema si el usuario que arranca los servicios web y los servicios de Sql son diferentes, lo importante son los privilegios de administrador. Después de crear la cuenta de usuario de dominio se debería de verificar si el nivel funcional de dominio es de al menos Windows Server 2003. Para ello en el servidor SERVSQL hacer “Ejecutar” y escribir dsa.msc, hacer clic con el botón derecho sobre el dominio donde esté instalado el cliente Navision y elegir la opción “Raise Domain Functional Level”. Instalar los servicios web de Navision en un equipo destinado para ello, en este caso lo instalaremos en el servidor “webservices03”. Para esto arrancar el DVD de Navision y en la opción de instalar componentes seleccionar Server, darle aplicar y dejar instalar.


  • 2.a configuración Servicios web Para configurar los servicios web es necesario ir a los servicios (herramientas admin.-->Servicios).Los dos servicios web de Navision son: - Microsoft Dynamics Nav Business Web Services - Microsoft Dynamics Nav Server En las propiedades de cada uno de estos dos servicios es necesario cambiar el usuario de logueo (pestaña LogOn opción this account)por el usuario que hemos creado anteriormente (webservices).

  • 2.b Fichero configuración de servicios web Los parámetros del servicio Web se configuran en el fichero “CustomSettings” dentro de la carpeta C:\Program Files (x86)\Microsoft Dynamics NAV\60\Service del servidor donde están los web services instalados (Webservices03). Los parámetros más importante a modificar son : - (se indica el servidor de base de datos) - (nombre de la base de datos sobre la que consumen los web service) - (nombre de la instancia del Navision Nav Server, es decir para identificar ese servicio en concreto, por defecto es DynamicsNAV no hace falta cambiarla pero se puede cambiar por ejemplo si hay más servicios instalados y así poder identificarlos) Una vez modificados estos parámetros se arrancan los servicios web. Se recomienda arrancar primero “Microsoft Dynamics Nav Server” y luego “Microsoft Dynamics Nav Business Web Service”.
3 Activar el Object Change Listener (OCL) Monitoriza los cambios de objectos que se producen en la base de datos (Pej. creación de campos en las Pages ), sin esto activado no se pueden conectar los clientes con el servidor. Para poder inicializarlo el servidor de Navision debe tener permisos para la base de datos de Sql. Activar y asignar permisos minimos para el OCL: - Abrir el SQL management studio y luego file --> new-->Query with current connection y escribir las siguientes consultas. Por cada una hay que ejecutar.

  • USE MASTER CREATE LOGIN [ReplaceWithNAVServerAccount] FROM WINDOWS; GO USE [ReplaceWithYourDatabaseName]

  • CREATE USER [ReplaceWithNAVServerAccount] FOR LOGIN [ReplaceWithNAVServerAccount];

  • CREATE SCHEMA [$ndo$navlistener] AUTHORIZATION [ReplaceWithNAVServerAccount];

  • GO ALTER USER [ReplaceWithNAVServerAccount] WITH DEFAULT_SCHEMA = [$ndo$navlistener];

  • GRANT SELECT ON [Object Tracking] TO [ReplaceWithNAVServerAccount];


4 Dar permisos de cuenta de usuario de dominio al directorio del servidor Es necesario darle al directorio del servidor del de “Microsoft dynamics nav server” del equipo donde están los servicios instalados (webservices03) todos los permisos del usuario de cuenta de dominio. - Ir a la carpeta : ProgramData\Microsoft\Microsoft Dynamics NAV\60\ - Propiedades y pestaña “Seguridad” - Seleccionar el usuario de cuenta de dominio y en los permisos poner Allow junto al permiso”Control Total”. - Seleccionar la cuenta “NETWORK SERVICE” y hacer como el usuario Allow junto al permiso de “Control Total” 5 Configuración de la delegación de usuarios Creando los SPN (Service Principal Names ): Hay que crear cuatro spn para el usuario webservices la sintaxis es la siguiente:


  • Setspn –a HTTP/WEBSERVICES03 webservices

  • Setspn –a HTTP/WEBSERVICES03.dominio webservices

  • Setspn –a DynamicsNAV/webservices03:7046 webservices

  • Setspn –a DynamicsNAV/webservices03.dominio:7046 webservices

Para comprobar que se han creado bien hay que ver el listado:

  • Setspn –l webservices

  • HTTP/WEBSERVICES03

  • HTTP/WEBSERVICES03.dominio

  • DynamicsNAV/webservices03:7046

  • DynamicsNAV/webservices03.ATSPAIN:7046
Delegación de acceso a los servicios Sql En el servidor de sql se realiza la delegación de usuarios: - En ejecutar escribir dsa.msc - Elegir buscar en el dominio donde está creado el usuario - Poner webservices y seleccionar resultado de la búsqueda - En la pestaña Delegation poner la opción 2 : o Trust this user for delegation to any service (Kerberos Only). - Aceptar. Comprobar si se puede hacer ping al servidor donde se encuentran los webservices desde el servidor de sql.