我自主办我的C#WinForms应用程序内的SignalR集线器服务器:SignalR跨域和IIS 7.5路由器只能在服务器上本地工作,如何在外部访问它?
string url = "http://localhost:8081/";
m_signalrServer = new Microsoft.AspNet.SignalR.Hosting.Self.Server(url);
// Map the default hub url (/signalr)
m_signalrServer.MapHubs();
// Start the SignalRserver
m_signalrServer.Start();
我的ASP.NET Web应用程序充当SignalR集线器JavaScript客户端:
<script type="text/javascript" src="/Scripts/jquery.signalR-1.0.0-alpha2.min.js"></script>
<script type="text/javascript" src="http://localhost:8081/signalr/hubs"></script>
<script type="text/javascript" language="javascript">
$(document).ready(function() {
$.connection.hub.url = 'http://localhost:8081/signalr'
var myHub = $.connection.myHub;
$.connection.hub.error(function() {
console.log("Error!");
});
$.connection.hub.start()
.done(function() {
console.log("Connected!");
})
.fail(function() { console.log("Could not connect!"); });
});
</script>
此代码工作正常时,我使用服务器的网络浏览器,因为它可以访问http://localhost:8081/signalr/hubs
。
但是,当您通过http://serverip
在外部浏览网站时,SignalR因为JQuery脚本正在查找http://localhost:8081/signalr
(我相信它在本地计算机上查找)而失败。
我已经改变了:
$.connection.hub.url = 'http://serverip:8081/signalr'
,我启用了8081网站的浏览,并且可以通过浏览http://serverip:8081
的网站。但是,浏览到http://serverip:8081/SignalR/Hubs
找不到从http://localhost:8081/siganlr/hubs
可用的集线器文件。
而且,作为一个测试我启用SignalR通过App_Start文件夹中的ASP.NET Web应用程序中 - > RegisterHubs.cs文件:RouteTable.Routes.MapHubs();
这样做可以让我浏览到http://serverip:8081/signalr/hubs
或http://serverip/signalr/hubs
,我可以看到集线器由ASP.NET网站生成。这不是我想要的,因为这不是我从C#WinForms应用程序托管的中心。
再次浏览到http://serverip:8081/signalr/hubs
未找到http://localhost:8081/signalr/hubs
上存在的信号器或集线器文件。有谁知道我可以如何让这个文件可用于我的ASP.NET Web应用程序,以便我可以让SignalR在外部工作?
编辑:我忘了提及8081是在服务器防火墙上打开。
感谢信。这已经解决了我的问题。经过大量搜索,昨天我还发现这个帖子与你的答案以及我遇到的问题有关:https://github.com/SignalR/SignalR/issues/684(以防其他人遇到此问题)。 – Mausimo