Гибридное соединение Azure - обработка исключений
Подключение к локальным службам с помощью гибридных подключений Azure
При производстве подключение и отправка сообщения гибридному подключению Azure с использованием протокола веб-сокета с использованием приведенного ниже кода.
Когда целевое гибридное соединение Azure недоступно, выдается сообщение об ошибке: «Microsoft.Azure.Relay.EndpointNotFoundException: удаленное имя не может быть разрешено: 'myAzureHC-dev.servicebus.windows.net'»,
try
{
var tokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(relayKey, relayKeyValue);
var hcClient = new HybridConnectionClient(new Uri(String.Format("sb://{0}/{1}", relayNamespace, relayConnectionName)), tokenProvider);
HybridConnectionStream hcStream = await hcClient .CreateConnectionAsync();
StreamWriter writer = new StreamWriter(hcStream ) { AutoFlush = true };
await writer.WriteLineAsync(jsonPayload);
}
catch (RelayException ex)
{
//this block executes when Azure Hybrid Connection not available
}
Недавно пытался использовать протокол http для подключения и отправки сообщения в гибридное соединение Azure, как показано ниже,
Когда целевое гибридное соединение Azure недоступно, оно выдает ДРУГОЙ тип исключения и сообщение ":"System.Net.Http.HttpRequestException: произошла ошибка при отправке запроса ", который отличается от типа исключения и сообщения, создаваемого способом подключения через веб-сокет к гибридному подключению Azure для того же сценария, т. е. сценария гибридного подключения Azure недоступна
Эта разница в типе исключения и сообщении нарушает обратную совместимость после миграции с веб-сокета на последний способ HTTP-подключения к гибридному соединению Azure. Точно так же для других сценариев, таких как «AuthorizationFailure», «EndpointNotFound», при подключении к гибридному соединению Azure «HTTP» исключение не возникает.
Как преодолеть разницу в разнице сообщений об исключении между старым способом "websocket" и последним способом "HTTP" подключения к гибридному соединению Azure? таким образом, чтобы поддерживать обратную совместимость с существующим клиентом PRODUCTION после миграции.
try
{
var tokenProvider =
TokenProvider.CreateSharedAccessSignatureTokenProvider(relayKey, relayKeyValue);
var uri = new Uri(string.Format(String.Format("sb://{0}/{1}", relayNamespace, relayConnectionName));
var token = (await tokenProvider.GetTokenAsync(uri.AbsoluteUri, TimeSpan.FromMinutes(5))).TokenString;
var response = await _httpClient.PostAsync(uri, content);
}
catch (RelayException ex)
{
}
catch (HTTPRequestException ex)
{
//this block executes when Azure Hybrid Connection not available
}