El servicio asíncrono da Error 401 cuando ejecutamos un workflow

Últimamente estamos viendo este problema bastantes veces, por tanto no podíamos dejar de añadirlo a nuestro blog.

El error ocurre en las siguientes condiciones:

  • Nuestro Crm 4.0 está instalado en un Windows Server 2008.
  • El servicio asíncrono está arrancado con una cuenta de dominio (es decir, ni Local System ni Servicio de Red).
  • Dicha cuenta de dominio no está marcada en Directorio Activo para permitir delegación de credenciales.

El síntoma principal es que los los trabajos de workflow no logran ejecutarse correctamente y se quedan en espera.

Si cogemos trazas (si no sabéis cómo, mirad los posts anteriores de mi compañero Nacho), veremos que la traza del servicio asíncrono muestra un error 401 cada vez que forzamos que uno de esos trabajos en espera se reanude de nuevo.

La solución para la mayoría de ocurrencias de este problema es ir al Directorio Activo, buscar la cuenta que arranca el servicio asíncrono (que debería ser la misma que arranca el Grupo de Aplicaciones de Crm en Internet Information Server), y marcar que permita Delegación de Credenciales:

account trusted for delegation

Adicionalmente, IIS7 necesita ser configurado para admitir delegación de credenciales cuando la cuenta que arranca el Grupo de Aplicaciones (Application Pool) no es la cuenta de máquina.

Para arreglar esto, hemos de ejecutar el siguiente comando en el servidor de Crm.

C:\Windows\System32\inetsrv>appcmd set config -section:windowsauthentication /useAppPoolCredentials:true

Al realizar esta acción, esto es lo que queda modificado en el fichero applicationHost.config:

C:\Windows\System32\inetsrv>appcmd list config "Default Web Site" -section:windowsauthentication
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="true" useAppPoolCredentials="true">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
</authentication>
</security>
</system.webServer>

Tras un iisreset, podemos volver a Crm e intentar reanudar uno de los trabajos que fallaban antes.

Por Luis Mazario