1

我在我的 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 客户端:

<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.

此外,作为测试,我通过 App_Start 文件夹 -> RegisterHubs.cs 文件在 ASP.NET Web 应用程序中启用了 SignalR:RouteTable.Routes.MapHubs();

这样做可以让我浏览到http://serverip:8081/signalr/hubsorhttp://serverip/signalr/hubs并且我可以看到由 ASP.NET 网站生成的集线器。这不是我想要的,因为这不是我从 C# WinForms 应用程序托管的集线器。

再一次,浏览到http://serverip:8081/signalr/hubs没有找到 signalr 或存在于http://localhost:8081/signalr/hubs. 有谁知道我如何使这个文件可用于我的 ASP.NET Web 应用程序,以便我可以让 SignalR 在外部工作?

编辑:我忘了提到 8081 在服务器防火墙上是打开的。

4

1 回答 1

2

将其更改为:

string url = "http://*:8081/";

m_signalrServer = new Microsoft.AspNet.SignalR.Hosting.Self.Server(url);
于 2012-11-23T10:51:37.850 回答