问题描述
使用 Azure 混合连接连接到本地服务
在生产中,使用以下代码使用 websocket 协议连接和发送消息到 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 混合连接不可用时,它会抛出 DIFFERENT 异常类型和消息”:“System.Net.Http.HttpRequestException:发送请求时发生错误。”这与 websocket 抛出的异常类型和消息不同连接到相同场景的 Azure 混合连接的方式,即 Azure 混合连接不可用的场景
异常类型和消息的这种差异破坏了从 websocket 迁移到连接到 Azure 混合连接的最新 HTTP 方式后的向后兼容性。同样,对于其他场景,如“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}",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
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)