SignalR跨域和IIS 7.5到集线器的路径只能在服务器上本地工作,如何从外部访问它?
我在我的C#WinForms应用程序中自我托管SignalR Hubs服务器:
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 Hubs 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!"); }); });
当我使用服务器的Web浏览器时,此代码可以正常工作,因为它可以访问http://localhost:8081/signalr/hubs
。
但是,当您通过http://serverip
从外部浏览站点时,SignalR会失败,因为JQuery脚本正在查找http://localhost:8081/signalr
(我相信它在您的本地计算机上查找)。
我改变了:
$.connection.hub.url = 'http://serverip:8081/signalr'
我在8081上启用了浏览网站的function,可以通过http://serverip:8081
浏览网站。 但是,浏览到http://serverip:8081/SignalR/Hubs
无法找到可从http://localhost:8081/siganlr/hubs
。
另外,作为测试,我通过App_Start文件夹 – > RegisterHubs.cs文件在ASP.NET Web应用程序中启用了SignalR: 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
上存在的hubs文件。 有谁知道我如何将这个文件提供给我的ASP.NET Web应用程序,以便我可以使SignalR在外部工作?
编辑:我忘了提到8081是在服务器防火墙上打开。
将其更改为:
string url = "http://*:8081/"; m_signalrServer = new Microsoft.AspNet.SignalR.Hosting.Self.Server(url);