我自主辦我的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