HOWTO: Exponer servicios de Microsoft Dynamics AX 2012 en un IIS externo

Para exponer los servicios web de Microsoft Dynamics AX 2012 fuera de nuestra red, es necesario instalar un servicio IIS que maneje las conexiones y la seguridad con “el mundo exterior“. La instalación de este servicio dependerá de nuestra red y lo ideal es que sea realizado por personal especializado en estas tareas (normalmente en un departamento de sistemas). Una vez instalado, la conexión de este servicio IIS con nuestra instancia de AX es muy sencilla.

Antes de empezar la instalación en sí, comprobamos algunos pre-requisitos.

  • El servicio IIS debe estar instalado y funcionando previamente. Si no lo está, para instalarlo hacemos lo siguiente:
    • La mayoría de pre-requisitos se pueden instalar directamente desde el instalador de Microsoft Dynamics AX 2012, pero si esto falla será necesario instalarlo manualmente.
    • Activar el rol Web Services en nuestro servidor y seguir el asistente.
    • Un reinicio es necesario al final del proceso.
    • Las opciones por defecto son suficientes para la instalación de Dynamics AX, pero probablemente será necesario realizar ajustes extra para adaptarlo a la seguridad que deseamos implementar en nuestra empresa, según el caso. No hay que olvidar que la finalidad de esta instalación es exponer este servicio a internet.
    • Puesto que el ejemplo es un servidor de pruebas, mantenemos las opciones por defecto, lo que implementará la seguridad nativa de Windows con Active Directory, solicitando un usuario válido durante la conexión.
  • Una vez instalado y asegurado nuestro servicio IIS, iniciamos el asistente de instalación de Dynamics AX 2012 en el mismo servidor y elegimos la opción Web Services on IIS, y seguimos las instrucciones. Durante el asistente, se nos solicita diversa información sobre nuestra instancia de AOS y las credenciales utilizadas para la conexión, como son:
    • Información sobre la instancia de AOS en sí: Nombre y puertos TCP/IP y WDSL
    • Cuenta de servicio configurada en AX (Business connector proxy)
    • Pool de IIS donde se instalarán y expondrán los servicios de AX
    • Las cuentas de servicio utilizadas para ejecutar nuestras instancias de AOS
  • El propio instalador configura la seguridad por defecto de la aplicación recién instalada en el pool de IIS seleccionado, pero podemos revisarla y configurarla manualmente si es necesario:
    • Se ha creado la aplicación MicrosoftDynamicsAXAif60 en el pool de IIS indicado
    • Se ha creado un nuevo grupo de usuarios local llamado Microsoft Dynamics AX Web Service Administrator incluyendo los usuarios que ejecutan los servicios AOS, según indicamos en el instalador.
    • Se le ha otorgado permiso a este grupo en la carpeta local AifWebServices del servidor IIS

También se ha creado un nuevo servicio en Microsoft Dynamics AX que podemos revisar en Administración del sistema > Configurar > AIF > Sitios web. Utilizaremos este sitio web para asociarlo a un puerto de entrada para poder exponer métodos en nuestros servicios, de esta forma:

  • Crear un nuevo puerto de entrada y seleccionar
    • Adaptador: HTTP
    • URL: Seleccionar la aplicación recién creada de la lista
  • Añadir las operaciones de servicio que se desean exponer mediante el botón Service operations
  • Realizar el resto de configuraciones requeridas en el puerto de entrada, como validaciones o restricciones que vayamos a necesitar. En mi caso voy a limitar las conexiones a un grupo de usuario de AX y a una sola empresa.

Como se puede ver en las imágenes a continuación, las operaciones expuestas de este modo pueden ser consumidas desde una aplicación externa en Visual Studio, a través de la aplicación creada en nuestro IIS:

Espero que este manual paso a paso haya sido útil y pueda servir de referencia para futuras instalaciones 😉

HOWTO: Depurar desde Visual Studio código X++ que se ejecuta en el servidor AX 2012

Gran parte del código X++ que desarrollamos en clases se ejecuta en la capa del servidor (Data Providers en informes, procesos Batch, SysOperation, …), lo que resulta un poco incómodo a la hora de depurar. Si ponemos un breakpoint desde el editor de X++ en MorphX en código que se ejecuta en el servidor, veremos como el depurador integrado nunca se detiene en este punto.

Preparar el entorno de desarrollo para poder depurar código del servidor desde Visual Studio (incluso el código X++, que en el servidor siempre se ejecuta como código CIL) nos obliga a tener en cuenta unos cuantos pre-requisitos, así que los voy a enumerar aquí para tenerlos a mano cuando nos hagan falta:

Pre-requisitos y consideraciones previas:

  • Asegurarse de que el código CIL se ha ejecutado completamente y sin errores. De otra forma, el ensamblado que queremos depurar puede no estar disponible en su última versión, sino en la última que se compiló sin errores.
  • Para depurar código remoto, ejecutar Visual Studio siempre como Administrador (con permisos elevados, haciendo click-derecho > Ejecutar como administrador). Si no, más adelante tendremos problemas de permisos.
  • La depuración remota desde Visual Studio debe hacerse en el mismo servidor donde está instalado el AOS, lo que nos obliga indirectamente a utilizar un entorno de desarrollo, ya que esta no es la configuración ideal para un AOS en producción.
  • En la configuración del AOS debe estar activada la opción Enable breakpoints to debug X++ code runing on this server (esto tampoco es nada recomendable en un AOS en producción).
  • Asociar un proceso al AOS para depurar pone el servidor en un estado extremadamente inestable, con un riesgo muy importante de que el servicio se reinicie inesperadamente. Por tanto es muy recomendable utilizar un servidor de desarrollo aislado para no molestar al resto de desarrolladores. Si utilizamos un sólo AOS para todos los desarrolladores, puede ser interesante tener otro AOS para la depuración remota.

Iniciar la depuración remota:

  • Iniciar Visual Studio en el servidor y con permisos elevados.
  • Si no se está mostrando ya, mostrar el Application Explorer (desde el menú Ver), lo que nos muestra el AOS en VS.

Continue Reading…

Microsoft Dynamics ‘AX 7’ / Rainier

La noticia de que existe una próxima versión de Microsoft Dynamics AX (versión 7) y que ésta va a ser una revolución en cuanto a la tecnología que la mueve y la experiencia de usuario no es nueva, lo comentábamos aquí ya en Agosto de 2013. Microsoft lleva comentando el proyecto Rainier varios años en diferentes eventos, pero las noticias interesantes siguen bajo NDA por lo que no se pueden publicar todavía.

Microsoft Dynamics 'AX 7'

Sin embargo, en recientes eventos que se han organizado en torno al producto, como los recientes AXUG Focus 2015 y ASUG Summit y las pasadas Convergence 2015 y Microsoft Dynamics Technical Conference 2015 se han publicado numerosas imágenes (Por ejemplo: 1 2 3 4 5 6 7) que revelan el aspecto que va teniendo el producto y la nueva interfaz, además de algunas ideas (sin mucho detalle concreto) de los cambios en cuanto a la tecnología, arquitectura y herramientas de desarrollo, todas alineadas con el nuevo mantra de Microsoft: Cloud first, Mobile first.

Continue Reading…

Microsoft Dynamics AX 2012, servicios web, .NET Interop, cliente-servidor y arquitectura de aplicación

¡Vaya título! ¿Qué tienen que ver todos estos conceptos y por qué debería tenerlos en cuenta? Es posible que no sea una situación que se nos presente todos los días, pero hay veces donde hay que tener todos esos conceptos en cuenta para hacer que un fragmento de X++ funcione correctamente. Este ha sido mi caso: Tengo que consumir un servicio web externo desde Microsoft Dynamics AX 2012. Parece fácil, ¿no?. El servicio web se va a consumir en un proceso por lotes (servidor), pero también debe poder llamarse manualmente desde formularios (cliente).

En Microsoft Dynamics AX 2009, para utilizar un servicio debíamos añadir una referencia de servicio al AOT. En la versión 2012 creamos un proyecto Visual Studio de tipo Librería de clases. En ese proyecto de Visual Studio agregamos una referencia de servicio y agregamos el proyecto al AOT. No voy a entrar en detalle sobre ésto porque esta bien explicado por ejemplo en este white paper.

Una de las cosas a tener en cuenta acerca de los conceptos del título de este post está en las propiedades del proyecto en Visual Studio:

Propiedades Proyecto Visual Studio

Lo relevante aquí es marcar Deploy to Client si queremos que la DLL se despliegue a los clientes y Deploy to Server si queremos que se despliegue al servidor. De esta manera, el sistema copiará la librería cuando sea necesario a la carpeta correspondiente, descargándola de la base de datos (de la Model Store) donde está almacenada. Dependiendo de cómo se ejecute el código X++ que utiliza esta librería podemos marcar uno u otro o los dos.

Continue Reading…

Configurar Firewall en instalaciones Microsoft Dynamics AX 2012Microsoft Dynamics AX 2012 Firewall Setup

Complementando el artículo que publiqué hace unas semanas, recopilando los datos para configurar la seguridad de instalaciones Microsoft Dynamics AX 2012, el siguiente cuadro detalla la información necesaria para configurar el Firewall de Windows en cada una de las máquinas implicadas en una de estas instalaciones.

Componente Equipo Configuración del Firewall Notas
Setup Permitir conexiones HTTP salientes Para acceder a la documentacion disponible durante el wizard de instalación, es necesario tener acceso a Internet desde el equipo que ejecuta el setup.
Base de Datos Servidor SQL Server Excluir el puerto utilizado por SQL Server (1433 por defecto) Más información en la guía de instalación de SQL Server.
Application Object Server (AOS) Servidor AOS
  • Excluir el puerto TCP/IP utilizado por el AOS (2712 por defecto). La instalación crea una regla de entrada automáticamente para este puerto (Dynamics AX 6.0 -MicrosoftDynamicsAX (RPC)).
  • Excluir el puerto de los servicios WSDL utilizado por el AOS (8101 por defecto). La instalación crea una regla de entrada automáticamente para este puerto (Dynamics AX 6.0 -MicrosoftDynamicsAX (WSDL)).
  • Excluir el puerto del endpoint de los servicios utilizado por el AOS (8201 por defecto). La instalación crea una regla de entrada automáticamente para este puerto (Dynamics AX 6.0 -MicrosoftDynamicsAX (NetTCP)).
El Firewall de Windows debe estar activado en el equipo. Cada instancia de AOS utiliza un puerto diferente.

NOTA: Por defecto, cada vez que se instala una instancia de AOS en un equipo, el número de puerto TCP/IP y los puertos de los endpoint de sus servicios se incrementan en uno. Por ejemplo, la segunda instancia de AOS en un equipo debe ser asignada al puerto TCP/IP 2713 por defecto.

Cliente Equipo cliente Excluir Ax32.exe. El cliente utiliza un puerto TCP para conectar al AOS.
Business Intelligence Reporting Server Excluir el puerto utilizado por el directorio virtual de Reporting Services si no es el 80.
Intelligence Components Analysis Server
  • Excluir el puerto utilizado por Analysis Services (2383 por defecto).
  • Si se utiliza el SQL Server Browser, debe excluir también el puerto 2382.
Más información en la guía de instalación de SQL Server.
Debugger Equipo de desarrollador Excluir AxDebug.exe y sus aplicaciones de destino como Ax32.exe y AxServ32.exe. El depurador utiliza un puerto TCP asignado dinámicamente.
Enterprise Portal Servidor web
  • Activar Web Server (HTTP).
  • Excluir el puerto utilizado por el sitio de Enterprise Portal si no es el 80.
Si no se activa el Web server en el Firewall de Windows, sólo se podrá acceder al sitio desde el servidor local.
Servidor de ayuda Servidor web Excluir el puerto utilizado por el sitio de Help Server, si no es el 80.
Enterprise Search Servidor web Excluir el puerto utilizado por el sitio de Búsqueda, si no es el 80.
Web Services Servidor web Excluir el puerto utilizado por el sitio de los servicios web, si no es el 80. Aplicaciones externas utilizan este puerto para consumir los servicios web de Microsoft Dynamics AX basados en IIS.

Se recomienda obtener información actualizada en la siguiente página de TechNet.

If you use Windows Firewall to help protect your computers, Microsoft Dynamics AX components require the settings in the following table. For updated detail, see this page on TechNet

Component Computer Firewall Setting Notes
Setup Any Allow outbound HTTP connections To access the documentation that is available from the Setup wizard, you must be able to connect to the Internet from the computer where you are running Setup.
Database or Model Store Database Server Exclude the port used by SQL Server (1433 by default) For more information, refer to the SQL Server documentation.
Application Object Server (AOS) AOS Server
  • Exclude the TCP/IP port used by the AOS (2712 by default)

Setup automatically creates the inbound rule “Dynamics AX 6.0 -MicrosoftDynamicsAX (RPC)” for the TCP/IP port.

  • Exclude the services WSDL port used by the AOS (8101 by default)

Setup automatically creates the inbound rule “Dynamics AX 6.0 -MicrosoftDynamicsAX (WSDL)” for the WSDL port.

  • Exclude the services endpoint port used by the AOS (8201 by default)

Setup automatically creates the inbound rule “Dynamics AX 6.0 -MicrosoftDynamicsAX (NetTCP)” for the services endpoint port.

Windows Firewall must be enabled on the computer. Each AOS instance must use a different port number. NOTE: By default, each time you install an additional AOS instance on a computer, the TCP/IP port number and the Services endpoint port numbers increment by one. For example, the second AOS instance on a computer would be assigned to TCP/IP port 2713 by default.
Client Client Workstation Exclude Ax32.exe. The client uses a TCP port to connect to the AOS.
Business Intelligence Components Reporting Server Exclude the port used by Reporting Services virtual directories, if other than port 80.
Business Intelligence Components Analysis Server
  • Exclude the port used by Analysis Services (2383 by default)
  • If you are using SQL Server Browser, you must also exclude port 2382.
For more information about configuring access to Analysis Services through Windows Firewall, refer to the SQL Server documentation on MSDN.
Debugger Developer Workstation Exclude AxDebug.exe and its target applications, such as Ax32.exe and AxServ32.exe. The debugger uses a dynamically allocated TCP port.
Enterprise Portal Web Server
  • Activate Web Server (HTTP)
  • Exclude the port used by the Enterprise Portal Web site, if other than port 80.
If you do not activate the Web server in Windows Firewall, you will only be able to view the site from the local server.
Help Server Web Server Exclude the port used by the Help Server web site, if other than port 80.
Enterprise Search Web Server Exclude the port used by the Search web site, if other than port 80.
Web Services Web Server Exclude the port used by the services web site, if other than port 80. External applications use this port to consume the IIS-based Microsoft Dynamics AX web services.

Seguridad en Instalaciones Microsoft Dynamics AX 2012

Requisitos de Seguridad para los Servidores de Microsoft Dynamics AX

Servidor Configuración
Application Object Server (AOS) El directorio de logs no se puede cambiar. El log siempre se guarad en <carpetainstalación>\log. Restringir el acceso a este directorio sólo a administradores y a las cuentas de servicio de AOS.

La cuenta utilizada para el inicio de sesión del servicio necesita el permiso:

  • Inicio de sesión como servicio.
SQL Server Utilizar la configuración de seguridad recomendada para servidores SQL Server incluida en TechCenter.
Role Center y Enterprise Portal El servidor ejecutando IIS debe utilizar autenticación Basica y Secure Sockets Layer (SSL) para usuarios que inician sesión desde fuera de la red corporativa. El servidor de Enterprise Portal puede estar en una red perimetral (DMZ) o dentro de la red interna. NOTA: Enterprise Portal utiliza el usuario proxy de Business Connector. Seguir las recomendaciones de seguridad de Microsoft para asegurar servidores IIS y SharePoint.
Reporting Server El servidor ejecutando el sitio web de SSRS debe estar dentro del dominio y no expuesto a Internet. Seguir las las recomendaciones de seguridad de Microsoft para asegurar servidores SSRS.
Application Integration Framework (AIF) Seguir las recomendaciones de seguridad de Microsoft para asegurar servidores IIS.
Online Analytical Processing (OLAP) Seguir las recomendaciones de seguridad de Microsoft para asegurar servidores SSAS.

Cuentas de dominio para servicios Microsoft Dynamics AX