Azure 混合连接 - 异常处理

问题描述

使用 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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...