Solución de problemas del Service Bus
En las siguientes secciones se describen problemas que pueden tener lugar al escribir aplicaciones para el Service Bus de Windows Azure, así como el modo de resolverlos.
Solución de problemas de las aplicaciones de Windows Azure
En las siguientes secciones se describe la solución de problemas de las aplicaciones de Windows Azure.
La aplicación se ejecuta en el entramado de desarrollo, pero se bloquea cuando se implementa
Síntoma
Una aplicación de Service Bus se ejecuta sin errores en el entramado de desarrollo, pero se bloquea una vez implementada en los servidores de Windows Azure.
Causa
Los ensamblados de Service Bus en la actualidad no están integrados en la plataforma Windows Azure. En consecuencia, la aplicación está tratando de obtener acceso a un ensamblado que no existe en el servidor.
Resolución
Agregue el ensamblado de Service Bus a su paquete de implementación (por ejemplo, defina el ensamblado en Copia local). Tenga en cuenta que, como resultado, deberá actualizar los ensamblados manualmente.
Los extremos se pueden definir mediante programación, pero fallan cuando se definen en el archivo de configuración
Síntoma
Una aplicación funciona cuando los extremos se definen mediante programación, pero falla cuando estos mismos ajustes de configuración se almacenan en el archivo App.config asociado. La aplicación genera el siguiente error:
System.Configuration.ConfigurationErrorsException: No se encuentra la extensión de enlace de configuración 'system.serviceModel/bindings/netTcpRelayBinding'. Compruebe que la extensión de enlace está registrada adecuadamente en system.serviceModel/extensions/bindingExtensions y que está escrita correctamente.
Causa
Los ensamblados de Service Bus en la actualidad no están integrados en la plataforma Windows Azure. En el equipo local, si tiene instalado el SDK de Windows Azure, se modificará su archivo Machine.config para agregar varias extensiones Windows Communication Foundation (WCF), tales como NetTcpRelayBinding. De este modo, la aplicación podrá encontrar la información relevante en las diferentes secciones de dicho archivo, como la sección netTcpRelayBinding. Esto no sucede en la plataforma Windows Azure, por lo que la aplicación no encuentra la información correspondiente.
Resolución
Para que su configuración funcione con Windows Azure, copie las extensiones del archivo Machine.config local en su archivo App.config. En caso contrario, no se reconocerán las etiquetas tales como netTcpRelayBinding. No obstante, si lo hace, su aplicación no se ejecutará localmente por haber extensiones duplicadas. En consecuencia, deberá conservar dos versiones del archivo App.config; una localmente y una para Windows Azure. Se recomienda que realice esta tarea en concreto mediante programación.
Problemas de conectividad
Los siguientes temas de solución de problemas contienen información sobre el modo de conectar con el Service Bus. Si no encuentra la solución más adelante en esta sección, puede considerar alguna de las siguientes posibilidades:
-
Ejecute un seguimiento de red, pues es posible que la red esté inactiva. El uso de Monitor de red para determinar el estado de la red podría ayudarle a depurar su problema.
La aplicación cliente no encuentra el extremo de destino
Síntoma
Cuando intenta conectarse al Service Bus con una aplicación cliente, obtiene el siguiente error:
Excepción no controlada: System.ServiceModel.EndpointNotFoundException: no se encontró el extremo. Asegúrese de que puede conectarse a Internet mediante el puerto HTTP 80 y el puerto TCP 808.
Causa
Existen diversas causas posibles para este error.
Resolución
-
Compruebe si el host se encuentra en ejecución. Si no es así, no hay ningún extremo con el que conectarse. Puede ejecutar el servicio usando uno de los dos procedimientos que se muestran aquí:
-
Modo de depuración: haga clic con el botón secundario en el proyecto de servicio en el Explorador de soluciones de Visual Studio y haga clic en Depurar. A continuación, haga clic en Iniciar nueva instancia. Una vez que se inicie el servicio, repita este procedimiento para el cliente. Tenga en cuenta que puede depurar el cliente aunque el servicio ya se encuentre en ejecución.
-
Fuera del modo de depuración: configure su proyecto de servicio como proyecto inicial. Desde el menú Depurar, haga clic en Iniciar sin depurar. Al hacerlo, aunque se ejecutará la aplicación de servicio, no se verá afectado Visual Studio. Una vez se inicie el servicio, defina el proyecto del cliente como proyecto inicial y ejecútelo.
-
Modo de depuración: haga clic con el botón secundario en el proyecto de servicio en el Explorador de soluciones de Visual Studio y haga clic en Depurar. A continuación, haga clic en Iniciar nueva instancia. Una vez que se inicie el servicio, repita este procedimiento para el cliente. Tenga en cuenta que puede depurar el cliente aunque el servicio ya se encuentre en ejecución.
-
Asegúrese de que ha configurado la propiedad Copia local para el ensamblado Microsoft.ServiceBus.dll (en Visual Studio) como true. Los servidores de nube no tienen instalado el SDK de Windows Azure. En consecuencia, deberá incluir el ensamblado con su paquete. Sin él, su rol de trabajo no funcionará correctamente.
-
Confirme que puede conectarse a Internet mediante el puerto HTTP 80 y el puerto TCP 808.
El cliente no puede finalizar la negociación de seguridad en el tiempo de espera configurado
Síntoma
La aplicación no puede conectarse al Service Bus y devuelve el siguiente mensaje de error:
"El cliente no puede finalizar la negociación de seguridad en el tiempo de espera configurado (00:01:00). La sección de negociación actual es 1 (00:00:59.9429968)."
Causa
Las credenciales de autenticación podrían estar mal configuradas.
Resolución
Compruebe si está autenticando al cliente. Específicamente, compruebe si ha configurado RelayClientAuthenticationType en None. De manera predeterminada, el valor es RelayAccessToken, lo que requiere que proporcione una notificación de autenticación, tal como un secreto compartido. No obstante, si configura manualmente el valor en None, el cliente no debe proporcionar ninguna autenticación.
Si no ha configurado el tipo de autenticación, probablemente tenga RelayClientAuthenticationType con el valor predeterminado de RelayAccessToken. Si es así, compruebe si su notificación de autenticación se ha especificado correctamente. Para obtener más información, vea Protección y autenticación de una conexión de Service Bus.
La aplicación no puede verificar la seguridad cuando se conecta con el Service Bus
Síntoma
Al tratar de conectarse con el Service Bus, recibe el siguiente error:
"Error al comprobar la seguridad del mensaje"
Causa
Una posible causa de este error es que la hora UTC del equipo local vaya adelantada de la hora UTC en el servidor del Service Bus. Por ejemplo, puede que la marca de tiempo UTC local sea 8:06, mientras que la del servidor sea 8:05. El servidor considera que esto es una marca de hora no válida y genera el mensaje de error mencionado en la sección "Síntomas".
Resolución
Confirme que es correcta la hora UTC para el equipo local. Si es necesario, atrase manualmente el reloj unos minutos. El Service Bus no considera como una infracción de seguridad a los mensajes ligeramente anteriores, solo a aquellos que parezcan provenir del futuro.
La fuente ATOM no muestra el servicio
Síntoma
No puede localizar un servicio en la fuente ATOM, aunque tiene la certeza de que el servicio funciona correctamente.
Causa
El comportamiento predeterminado para el registro de servicio es no exponer un servicio a través de la fuente ATOM.
Resolución
Configure el extremo para ser reconocible, como se describe en Procedimiento: Publicar un servicio en el registro del Service Bus