在启动 ASP.NET Core SignalR 客户端之前,先配置其连接选项:

var connection = new HubConnectionBuilder()
    .WithUrl("https://events.example/hub", options =>
    {
        options.Proxy = new WebProxy("http://proxy.example:8080");
    })
    .Build();

此片段使用新版 SignalR 客户端和 System.Net。请通过应用程序的异步生命周期管理 connection ;将 hub URL 保留为目标地址。对于未配置代理凭据且获准的公共 hub 测试, HTTP 代理列表 可提供候选 HTTP 中间服务器。

传输设置代理的适用范围
默认连接行为HttpConnectionOptions.Proxy 会选中中间服务器;.NET 8 的默认 WebSocket 传输也会将其赋给 ClientWebSocketOptions
HttpMessageHandlerFactory自定义的是 HTTP 处理,而非 WebSocket 连接
所提供的 WebSocketFactory拥有自己的创建行为,必须应用其所需路由

协商成功并不能证明后续 WebSocket 隧道已被接受。如果自定义 WebSocketFactory 使用 .NET ClientWebSocket, 请在连接前配置该套接字的代理. 请阅读最后完成步骤的传输诊断信息,并检查任何有意启用的回退传输。

较早的 ASP.NET SignalR 示例所设置的 Connection.Proxy 属于另一代 API。使用 HubConnectionBuilder 时,应将代理与其他 WithUrl 传输选项放在一起,而不是去配置一个无关的 HTTP 请求。

相关文章