Necesito cambiar algunos ajustes de configuración sobre la marcha en un proyecto de Windows Azure, y deben cambiarse a través de una llamada al servicio web (actualizando la configuración de la aplicación ya sea a través de la API de la plataforma o el sitio de Administración de Azure no es una opción aquí).Azure: Comunicación In-WebRole (netTcpBinding) con Full-IIS
El proyecto tiene múltiples roles de web y de trabajador, todos los cuales deberán conocer la nueva configuración cuando se modifique.
La configuración se conserva para el almacenamiento duradero, y también se almacena en caché durante el tiempo de ejecución en una variable estática.
Mi solución fue crear un punto final interno (tcp) en mis roles, y usarlo para recorrer todos los roles e instancias dentro de esos roles, crear un cliente sobre la marcha y decirle a la instancia sobre la nueva configuración . (Más o menos idéntico a: http://msdn.microsoft.com/en-us/gg457891)
Al principio comencé un ServiceHost en el RoleEntryPoint de WebRole ... y me confundí por qué todo parecía funcionar bien cuando pisaba las comunicaciones (las variables estáticas se ajustaban correctamente)) - sin embargo, cuando realizaba otras llamadas al servicio web, la variable estática parecía haber "olvidado" lo que le había asignado.
Este fue el caso tanto localmente como en el entorno de preparación de Azure.
En este punto me di cuenta de que, debido a que estamos usando el modo IIS completo, RoleEntryPoint y los servicios web se ejecutaban en dos procesos separados: uno en el resguardo de Azure y otro en IIS.
"No es un problema" Dije, simplemente moveré la línea de código que inicia el ServiceHost desde mi RoleEntryPoint al global.asax - en ese punto el ServiceHost se habrá iniciado en el mismo proceso que el resto del sitio - y las variables estáticas serían las mismas.
Aquí es donde tengo un problema; Esto funciona muy bien en mi máquina local ejecutándose en el entorno de desarrollo. Tan pronto como despliegue para la puesta en escena, empiezo a recibir correos electrónicos de error que dicen que el canal utilizado para conectarse al servicio no se puede cerrar porque está en "estado de error".
Pregunta:
- Qué es diferente sobre Azure vs entorno de desarrollo que está causando esto?
- ¿Cómo puedo solucionar el problema o solucionarlo?
- ¿Alguien tiene algún consejo general sobre cómo debo obtener un error más descriptivo ... tengo que habilitar el diagnóstico wcf completo en Azure para obtener esto, o hay alguna otra forma en que puedo obtener los detalles de la excepción ?
de Seguimiento:
través de Escritorio remoto que he aprendido varias cosas interesantes:
Activación no HTTP no está instalado de forma predeterminada en Azure WebRoles. Creo que esto se puede superar mediante un script de inicio:
start/w pkgmgr/iu: WCF-NonHTTP-Activation;
El sitio web creado en IIS por la función web no tiene habilitado el protocolo net.tcp por defecto.También creo que esto se puede superar con un script de inicio:
% SystemRoot% \ system32 \ inetsrv \ appcmd.exe establecido aplicación "Sitio Web nombre aquí" /enabledProtocols:https,http,net.tcp
No he tenido tiempo para llevar esto hasta el final, ya que los plazos me han obligado a implementar algunas soluciones temporalmente.
Algunos enlaces útiles relacionados con este tema:
http://msdn.microsoft.com/en-us/magazine/cc163357.aspx
http://forums.iis.net/t/1160443.aspx
http://msdn.microsoft.com/en-us/library/ms731053.aspx
No sé cuál es la solución a este problema, pero he encontrado algo que es muy similar: http://stackoverflow.com/questions/5956814/unable-to-host-a-service-bus- wcf-host-in-iis-on-azure – knightpfhor