【Azure Relay】记录使用Azure Relay在通信中遇见侦听器(Listener)或发送端(Sender)断开时的异常日志 (Hybrid Connection by Websocket)

简介: Azure Relay 是一种中继服务,用于在无法直连的客户端与服务端间建立安全通信通道。其核心为 HybridConnectionListener(服务端)与 HybridConnectionClient(客户端),基于 WebSocket 实现双向消息传递。异常断开时,双方均记录 `RelayException`,提示“远程方未完成关闭握手”,仅 TrackingId 格式可区分断开方。

问题描述

使用Azure Relay服务,可以帮助服务器与客户端无法直接访问的情况下,提供牵线搭桥中转的沟通方式,俗称“中继”。

它是一种单对单的通信方式,需要对服务端和客户端代码有一些改动才可以,需要定义服务端侦听器(Listener)来接受消息,客户端(Caller)来发送消息。

  • 服务端侦听器(Listener): 使用 HybridConnectionListener 对象来初始化对象
  • 客户端发送者(Caller):使用 HybridConnectionClient 对象来初始化对象

 

Azure Relay的工作原理如下

原理图:

流程说明:

  1. Listening client sends a listening request to the Azure Relay service. The Azure load balancer routes the request to one of the gateway nodes.
  2. The Azure Relay service creates a relay in the gateway store.
  3. Sending client sends a request to connect to the listening service.
  4. The gateway that receives the request looks up for the relay in the gateway store.
  5. The gateway forwards the connection request to the right gateway mentioned in the gateway store.
  6. The gateway sends a request to the listening client for it to create a temporary channel to the gateway node that's closest to the sending client.
  7. The listening client creates a temporary channel to the gateway that's closest to the sending client. Now that the connection is established between clients via a gateway, the clients can exchange messages with each other.
  8. The gateway forwards any messages from the listening client to the sending client.
  9. The gateway forwards any messages from the sending client to the listening client.

基于以上的理解,当Listener 或 Caller 都突然中断的时候, Listener端会记录什么异常日志呢?Caller端会记录什么异常日志呢?

 

问题解答

第一部分:Caller端异常退出的情况, Listener会记录什么日志呢?

结果

在Listener的日志中,会输出如下的错误消息。

如果不对异常进行处理,会导致整个进程奔溃,Listener退出。

Exception in processing connection:

Microsoft.Azure.Relay.RelayException: The remote party closed the WebSocket connection without completing the close handshake.

TrackingId:xxx-xx-xx-xx-xxxx4_G8_G9,

Address:sb://xxxxxxxx.servicebus.chinacloudapi.cn/xxxxxxxt01,

Timestamp:5/17/2026 8:48:56 AM


---> System.Net.WebSockets.WebSocketException: The remote party closed the WebSocket connection without completing the close handshake.

  at System.Net.WebSockets.WebSocketBase.WebSocketOperation.<Process>d__19.MoveNext()

--- End of stack trace from previous location where exception was thrown ---

  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)

  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)

  at System.Net.WebSockets.WebSocketBase.<ReceiveAsyncCore>d__45.MoveNext()

--- End of stack trace from previous location where exception was thrown ---



实验

分别启动Listener 和 Caller,在正常通信两次后,直接关闭Caller窗口

 

 

第二部分:Listener端异常退出的情况, Caller会记录什么日志呢?

结果

在Caller的日志中,会输出如下的错误消息。

Microsoft.Azure.Relay.RelayException:

The remote party closed the WebSocket connection without completing the close handshake.

TrackingId:xxxx-x-x-xx-xxxx5e79e2e,

Address:sb://xxxxxx.servicebus.chinacloudapi.cn/xxxxxxst01, Timestamp:5/17/2026 9:29:11 AM

---> System.Net.WebSockets.WebSocketException: The remote party closed the WebSocket connection without completing the close handshake.

  at System.Net.WebSockets.WebSocketBase.WebSocketOperation.<Process>d__19.MoveNext()

--- End of stack trace from previous location where exception was thrown ---

  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)

  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)

  at System.Net.WebSockets.WebSocketBase.<ReceiveAsyncCore>d__45.MoveNext()


实验

分别启动Listener 和 Caller,在正常通信后,直接关闭Listener窗口

对比两种情况下的日志,都是 Microsoft.Azure.Relay.RelayException: The remote party closed the WebSocket connection without completing the close handshake.

 

微小的区别在异常消息中的TrackingId格式不同:

  • 如果是Caller异常断开,TrackingId中会携带 _GX_GX 标识,比如: TrackingId:xxx-xx-xx-xx-xxxx4_G8_G9
  • 如果是Listener异常断开,TrackingId中不会携带,它的值就是普通的guid字符串,如TrackingId:xxx-xx-xx-xx-xxxxxx0a5

以上内容,供您参考。

 

参考资料

什么是 Azure 中继?https://docs.azure.cn/zh-cn/azure-relay/relay-what-is-it

开始在 .NET 中使用中继混合连接 WebSocket : https://docs.azure.cn/zh-cn/azure-relay/relay-hybrid-connections-dotnet-get-started

 



当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

相关文章
|
3月前
|
弹性计算 人工智能 应用服务中间件
阿里云服务器2核2G最细活动价格详解:38元轻量与99元ECS具体配置、应用与选购指南
阿里云2核2G入门级云服务器价格与选购指南:包括轻量应用服务器(38元/年起,含200M带宽、40G ESSD云盘,支持WordPress、OpenClaw等镜像)和经济型e实例(99元/年,3M固定带宽)等多款规格。本文对比了经济型e、通用算力型u1、突发性能型t5/t6、密集计算型ic5等实例的价格与适用场景,指出轻量服务器适合个人建站、开发测试、AI应用快速部署,而经济型e实例更适合小型企业长期稳定运行。
|
3月前
|
缓存 监控 安全
别再让Docker占满你的硬盘!一篇搞定docker system所有命令
本指南详解 `docker system` 命令组,助你精准诊断与优雅清理 Docker 占用空间:`df` 查磁盘、`prune` 清资源、`info` 看配置、`events` 监事件。覆盖安全清理策略、自动化脚本与环境最佳实践,告别“磁盘爆满”焦虑。(239字)
466 2
别再让Docker占满你的硬盘!一篇搞定docker system所有命令
|
1月前
|
人工智能
Qwen3.8抢先体验!正式版即将发布并开源!
千问Qwen3.8即将开源,参数达2.4T,进化速度以“天”计,实力媲美Fable 5。预览版Qwen3.8-Max已上线阿里Token Plan等平台,限时优惠:日间Credits低至1折,夜间更优,个人/团队版月付仅35元起!
3550 140
|
3月前
|
人工智能 自然语言处理 监控
OpenClaw“养龙虾”保姆级教程:从零基础部署到进阶玩法与安全避坑指南
2026年,一款名为OpenClaw的开源AI智能体迅速走红全网,凭借红色龙虾样式的标识,被爱好者亲切称作“龙虾”,而部署、调教与使用OpenClaw的全过程,也被大家戏称为“养龙虾”。OpenClaw的核心理念是打造真正能落地执行任务的AI,它打破了传统AI仅停留在对话交互的局限,通过赋予模型操作系统、操控软件、读写文件、控制浏览器、执行代码等真实操作权限,让AI从“聊天助手”升级为可以自主干活的数字员工,能够理解自然语言指令并独立完成一系列自动化工作流。
1186 7
|
3月前
|
运维 网络协议
KKCE 在线 Ping|实用网络连通性检测小工具
KKCE在线Ping是一款免安装、浏览器直用的网络检测工具,支持多节点同步测试域名/IP连通性、延迟与丢包率,直观定位卡顿、访问异常等基础网络问题,兼顾个人排查与运维需求。(239字)
925 1
|
3月前
|
数据采集 JSON 监控
阐述:微店商品详情API实战经验
微店商品详情API(micro.item_get)提供标准化接口,通过商品ID一键获取标题、价格、库存、图片、SKU、详情页及店铺信息等全量公开数据。支持AppKey+Secret签名鉴权,HTTPS/JSON,稳定易对接,适用于数据采集、多平台同步、价格监控、多店管理等场景。(239字)
|
3月前
|
人工智能 供应链 算法
从“小单困局”到供应链Agent:成本结构、博弈逻辑与人机协同的技术推演
本文剖析C2M服装供应链中“小单困局”的本质——切换成本在极小批量下不可摊销的数学必然。通过Agent集群实现成本透明化、智能拼单与品类感知,推动供应链从零和砍价转向正和协同。人机分工明确:AI做“数字包工头”,人当“关系架构师”。(239字)
|
26天前
|
人工智能 运维 安全
阿里云通义千问大模型全系深度解析:全模态大模型功能、定价、API完整实战教程
随着人工智能产业全面落地,通用大模型已经从单纯对话工具进化为企业数字化、个人提效的核心算力基座。通义千问作为阿里云自研国产通用大模型,迭代形成完整Qwen3全系产品矩阵,覆盖轻量极速、均衡通用、旗舰推理、原生多模态四大梯度,依托百炼平台弹性算力支撑文本处理、全栈代码、图文视频解析、自主智能体等复合任务。本文完整拆解全系模型核心功能、六大性能优势、分层定价规则、多渠道上手教程,附带Python、cURL、运维全套可运行代码,覆盖个人创作者、开发团队、政企单位全部使用场景,全程无复杂前置门槛,兼顾轻量化试用与规模化商用部署需求。
4929 3
|
29天前
|
人工智能 自然语言处理 机器人
阿里云千问大模型详细介绍:包含模型、应用场景、模型服务和Agent开发平台,免费tokens活动
本文介绍了阿里云自主研发的通义千问(Qwen)大模型全栈产品体系,覆盖从2.4万亿参数的旗舰MoE模型Qwen3.8-Max,到轻量极速版、千万级超长上下文Qwen-Long,再到多模态、代码、垂直领域的完整模型谱系。其依托优化的混合专家架构,实现了高性能与低算力成本的平衡,原生支持全模态理解、百万级长文档处理与端到端智能体执行,打通阿里生态四百余项服务。配套阿里云百炼平台提供从API调用到低代码Agent开发的全链路能力,当前新用户可免费领取超7000万Tokens的90天体验额度,大幅降低开发者与企业落地AI应用的门槛。
|
1月前
|
人工智能 缓存 运维
最新版通义千问(Qwen3.7-Max)功能介绍
在AI智能体工程化落地全面普及的2026年,大模型的核心竞争早已从基础问答、文本生成,转向**长周期自主作业、真实业务落地、工程级开发、低成本高效推理**四大核心能力。传统大模型普遍存在任务续航短、工具调用稳定性差、复杂工程落地能力弱、无法对接真实业务系统、重复调用算力浪费严重等痛点,难以支撑企业7×24小时无人化智能运维、规模化代码迭代、全链路办公自动化需求。
3185 3