Azure Relay exceptions
This article lists some exceptions that might be generated by the Azure Relay APIs. This reference is subject to change, so check back for updates.
Exception categories
The Relay APIs generate exceptions that might fall into the following categories. Also listed are suggested actions that you can take to help resolve the exceptions.
User coding error: System.ArgumentException, System.InvalidOperationException, System.OperationCanceledException, System.Runtime.Serialization.SerializationException.
General action: Try to fix the code before you proceed.
Setup/configuration error: System.UnauthorizedAccessException.
General action: Review your configuration. If necessary, change the configuration.
Transient exceptions: Microsoft.ServiceBus.Messaging.MessagingException, Microsoft.ServiceBus.Messaging.ServerBusyException, Microsoft.ServiceBus.Messaging.MessagingCommunicationException.
General action: Retry the operation or notify users.
Other exceptions: System.Transactions.TransactionException, System.TimeoutException.
General action: Specific to the exception type. See the table in the following section.
Exception types
The following table lists messaging exception types and their causes. It also notes suggested actions you can take to help resolve the exceptions.
Exception type | Description | Suggested action | Note on automatic or immediate retry |
---|---|---|---|
Timeout | The server didn't respond to the requested operation within the specified time, which is controlled by OperationTimeout. The server might have completed the requested operation. It can happen due to network or other infrastructure delays. | Check the system state for consistency, and then retry, if necessary. See TimeoutException. | Retry might help in some cases; add retry logic to code. |
Invalid Operation | The requested user operation isn't allowed within the server or service. See the exception message for details. | Check the code and the documentation. Make sure that the requested operation is valid. | Retry doesn't help. |
Operation Canceled | An attempt is made to invoke an operation on an object that has already been closed, aborted, or disposed. In rare cases, the ambient transaction is already disposed. | Check the code and make sure it doesn't invoke operations on a disposed object. | Retry doesn't help. |
Unauthorized Access | The TokenProvider object couldn't acquire a token, the token is invalid, or the token doesn't contain the claims required to perform the operation. | Make sure that the token provider is created with the correct values. Check the configuration of the Access Control service. | Retry might help in some cases; add retry logic to code. |
Argument Exception, Argument Null, Argument Out Of Range |
One or more of the following has occurred: One or more arguments supplied to the method are invalid. The URI supplied to NamespaceManager or Create contains one or more path segments. The URI scheme supplied to NamespaceManager or Create is invalid. The property value is larger than 32 KB. |
Check the calling code and make sure the arguments are correct. | Retry doesn't help. |
Server Busy | Service isn't able to process the request at this time. | The client can wait for a period of time, then retry the operation. | The client might retry after a specific interval. If a retry results in a different exception, check the retry behavior of that exception. |
Quota Exceeded | The messaging entity has reached its maximum allowable size. | Create space in the entity by receiving messages from the entity or its subqueues. See QuotaExceededException. | Retry might help if messages have been removed in the meantime. |
Message Size Exceeded | A message payload exceeds the 256-KB limit. Note that the 256-KB limit is the total message size. The total message size can include system properties and any Azure .NET overhead. | Reduce the size of the message payload, then retry the operation. | Retry doesn't help. |
QuotaExceededException
QuotaExceededException indicates that a quota for a specific entity has been exceeded.
For Relay, this exception wraps the System.ServiceModel.QuotaExceededException, which indicates that the maximum number of listeners has been exceeded for this endpoint. It's indicated in the MaximumListenersPerEndpoint value of the exception message.
TimeoutException
A TimeoutException indicates that a user-initiated operation is taking longer than the operation timeout.
Check the value of the ServicePointManager.DefaultConnectionLimit property. Reaching this limit also can cause a TimeoutException.
For Relay, you might receive timeout exceptions when you first open a relay sender connection. There are two common causes for this exception:
- The OpenTimeout value might be too small (if even by a fraction of a second).
- An on-premises relay listener might be unresponsive (or it might encounter firewall rules issues that prohibit listeners from accepting new client connections), and the OpenTimeout value is less than about 20 seconds.
Example:
'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.
Common causes
There are two common causes for this error:
Incorrect configuration
The operation timeout might be too small for the operational condition. The default value for the operation timeout in the client SDK is 60 seconds. Check to see whether the value in your code is set to something too small. Note that CPU usage and the condition of the network can affect the time it takes for an operation to complete. It's a good idea not to set the operation timeout to a very small value.
Transient service error
Occasionally, the Relay service might experience delays in processing requests. It might happen, for example, during periods of high traffic. If it occurs, retry your operation after a delay, until the operation is successful. If the same operation continues to fail after multiple attempts, check the Azure service status site to see if there are known service outages.
ConnectionLostException - NameRenewalFailed
Symptoms
Your client receives the exception: Microsoft.Azure.Relay.ConnectionLostException : InternalServerError: NameRenewalFailed
.
Cause
Azure Relay service restarts listener connections every 24 hours. This behavior is by design. The Azure Relay service disconnects a listener active connection every 24 hours, and the listener will reconnect with the server using the retry mechanism.
Resolution
No action on your part as the listener automatically reconnects to the server. If you notice that your listener isn't connecting again, submit a ticket to the support team.