Excepciones de Azure Relay
En este artículo se enumeran algunas excepciones generadas por las API de Azure Relay. Esta referencia está sujeta a cambios, de modo que compruebe las actualizaciones.
Categorías de excepciones
Las API de Relay generan excepciones que podrían pertenecer a las siguientes categorías. También se presentan las acciones sugeridas que puede llevar a cabo para resolver las excepciones.
Error de codificación de usuario: System.ArgumentException, System.InvalidOperationException, System.OperationCanceledException, System.Runtime.Serialization.SerializationException.
Acción general: intente corregir el código antes de continuar.
Error de instalación o configuración: System.UnauthorizedAccessException.
Acción general: revise la configuración. Si es necesario, cambie la configuración.
Excepciones transitorias: Microsoft.ServiceBus.Messaging.MessagingException, Microsoft.ServiceBus.Messaging.ServerBusyException, Microsoft.ServiceBus.Messaging.MessagingCommunicationException.
Acción general: intente realizar de nuevo la operación o informe a los usuarios.
Otras excepciones: System.Transactions.TransactionException, System.TimeoutException.
Acción general: específica del tipo de excepción. Consulte la tabla en la sección siguiente.
Tipos de excepciones
En la tabla siguiente se enumeran los tipos de excepción de mensajería y sus causas. También incluye acciones sugeridas que puede seguir para resolver las excepciones.
Tipo de excepción | Descripción | Acción sugerida | Nota sobre el reintento automático o inmediato |
---|---|---|---|
Tiempo de espera | El servidor no respondió a la operación solicitada en el tiempo especificado, que está controlado por OperationTimeout. Puede que el servidor haya completado la operación solicitada. Puede ocurrir debido a retrasos en la red u otra infraestructura. | Compruebe la coherencia del estado del sistema y vuelva a intentarlo si es necesario. Consulte TimeoutException. | El reintento podría resultar útil en algunos casos; agregue lógica de reintento al código. |
Operación no válida | La operación del usuario solicitada no está permitida en el servidor o servicio. Consulte el mensaje de excepción para obtener detalles. | Compruebe el código y la documentación. Asegúrese de que la operación solicitada sea válida. | Los reintentos no funcionan. |
Operación cancelada | Se realiza un intento para invocar una operación en un objeto que ya se ha cerrado, anulado o eliminado. En raras ocasiones, la transacción de ambiente ya se ha eliminado. | Compruebe el código y asegúrese de que no invoca operaciones de un objeto desechado. | Los reintentos no funcionan. |
Acceso no autorizado | El objeto TokenProvider no pudo adquirir un token, el token no es válido o el token no contiene las notificaciones necesarias para realizar la operación. | Asegúrese de que el proveedor de tokens se haya creado con los valores correctos. Compruebe la configuración de Access Control Service. | El reintento podría resultar útil en algunos casos; agregue lógica de reintento al código. |
Excepción de argumento, Argumento Null, Argumento fuera del intervalo |
Se ha producido una o varias de las siguientes situaciones: Uno o varios de los argumentos proporcionados para el método no son válidos. El identificador URI proporcionado a NamespaceManager o Create contiene uno o más segmentos de ruta de acceso. El esquema de URI proporcionado a NamespaceManager o Create no es válido. El valor de la propiedad es mayor de 32 KB. |
Compruebe el código de llamada y asegúrese de que los argumentos sean correctos. | Los reintentos no funcionan. |
Servidor ocupado | El servicio no puede procesar la solicitud en este momento. | El cliente puede esperar durante un período de tiempo y volver a intentar realizar la operación. | El cliente puede reintentar después de un intervalo específico. Si el reintento genera otra excepción, compruebe el comportamiento de reintento de esa excepción. |
Cuota superada | La entidad de mensajería alcanzó su tamaño máximo permitido. | Cree espacio en la entidad recibiendo mensajes de esta o de sus subcolas. Consulte QuotaExceededException. | El reintento podría resultar útil si los mensajes se eliminan mientras este se lleva a cabo. |
Tamaño de mensaje superado | Una carga de mensaje supera el límite de 256 KB. Tenga en cuenta que el límite de 256 KB es el tamaño total del mensaje. El tamaño total del mensaje puede incluir propiedades del sistema y cualquier sobrecarga .NET. | Reduzca el tamaño de la carga del mensaje y vuelva a intentar la operación. | Los reintentos no funcionan. |
QuotaExceededException
QuotaExceededException indica que se ha superado una cuota de una entidad específica.
Para Relay, esta excepción encapsula System.ServiceModel.QuotaExceededException, lo que indica que se ha superado el número máximo de agentes de escucha para este punto de conexión. Se indica en el valor MaximumListenersPerEndpoint del mensaje de excepción.
TimeoutException
TimeoutException indica que la operación iniciada por el usuario está superando el tiempo de espera.
Compruebe el valor de la propiedad ServicePointManager.DefaultConnectionLimit. Alcanzar este límite puede provocar una TimeoutException.
Para Relay, puede que reciba excepciones de tiempo de espera al abrir por primera vez una conexión de remitente de la retransmisión. Hay dos causas comunes de esta excepción:
- Puede que el valor de OpenTimeout sea demasiado pequeño (incluso por una fracción de un segundo).
- Es posible que los agentes de escucha de retransmisión locales no respondan (o puede que encuentren problemas relativos a las reglas de firewall que prohíban a los agentes de escucha aceptar nuevas conexiones de cliente) y que el valor de OpenTimeout sea inferior a unos 20 segundos.
Ejemplo:
'System.TimeoutException’: The operation did not complete within the allotted timeout of 00:00:10.
The time allotted to this operation may have been a portion of a longer timeout.
Causas comunes
Hay dos causas comunes de este error:
Configuración incorrecta
El tiempo de espera de la operación podría ser demasiado pequeño para la condición operativa. El valor predeterminado para el tiempo de espera de la operación en el SDK de cliente es 60 segundos. Compruebe si su código tiene el valor establecido en algo demasiado pequeño. Tenga en cuenta que el uso de CPU y el estado de la red pueden afectar al tiempo necesario para que se complete una operación. Se recomienda no establecer el tiempo de espera de la operación en un valor muy bajo.
Error temporal del servicio
En ocasiones, el servicio Relay podría experimentar retrasos en el procesamiento de solicitudes. Puede ocurrir, por ejemplo, durante períodos de tráfico elevado. Si se produce, vuelva a intentar la operación después de un retraso, hasta que la operación se realice correctamente. Si la misma operación aún experimenta errores después de varios intentos, visite el sitio de estado del servicio de Azure para ver si hay interrupciones del servicio conocidas.
Conectar ionLostException: NameRenewalFailed
Síntomas
El cliente recibe la excepción: Microsoft.Azure.Relay.ConnectionLostException : InternalServerError: NameRenewalFailed
.
Causa
El servicio Azure Relay reinicia las conexiones del agente de escucha cada 24 horas. Este comportamiento es así por diseño. El servicio Azure Relay desconecta una conexión activa del agente de escucha cada 24 horas y el agente de escucha se volverá a conectar con el servidor mediante el mecanismo de reintento.
Solución
Ninguna acción de su parte como el agente de escucha se vuelve a conectar automáticamente al servidor. Si observa que el agente de escucha no se está conectando de nuevo, envíe una incidencia al equipo de soporte técnico.