如何远程连接自托管SignalR的WPF应用?附相关咨询
自托管SignalR远程连接问题解答
问题场景
本地连接自托管SignalR服务器(WPF应用)正常,但远程无法连接;远程浏览器输入[服务器IPv4]:7777/signalr/hubs能看到生成的hubs文件,但无法正常连接服务器。
问题1:远程电脑浏览器需输入什么URL才能连接服务器?
远程浏览器访问网页时,需要输入服务器的IPv4地址+端口+网页的访问路径:
- 如果网页是服务器默认首页,直接输入
http://[你的服务器IPv4地址]:7777/ - 如果网页有具体路由(比如名为Index的页面),则输入
http://[你的服务器IPv4地址]:7777/Index
而SignalR的连接端点URL,客户端需要指向服务器的SignalR服务地址:http://[你的服务器IPv4地址]:7777/signalr
问题2:哪些代码决定该URL?
有两处关键代码决定了连接的URL:
- 服务器端:WPF主窗口中的服务地址配置
private string url = "http://*:7777";
这里的*表示服务器监听所有网卡的7777端口,7777是对外提供服务的端口,这决定了服务器对外暴露的访问端口和范围。
- 客户端:两处硬编码的地址配置
- Index页面中引用自动生成的hubs脚本:
<script src="http://localhost:7777/signalr/hubs"></script>
- Main.js中配置SignalR连接地址:
$.connection.hub.url = "http://localhost:7777/signalr";
关键问题修复建议
你当前客户端代码硬写了localhost,远程电脑访问时会指向自身本地,导致无法连接到你的服务器。推荐改成相对路径,自动适配当前访问的主机地址:
- 修改Index页面的hubs脚本引用:
<script src="/signalr/hubs"></script>
- 修改Main.js中的连接地址:
$.connection.hub.url = "/signalr";
这样不管是本地访问还是远程访问,客户端都会自动使用当前页面的主机地址来连接SignalR服务器,无需手动修改IP。
内容的提问来源于stack exchange,提问作者Michael Cox
相关产品推荐
相关产品推荐

