SignalR js客户端似乎忽略了url端口

Ken*_*ith 10 javascript signalr signalr-hub

我正在尝试用SignalR组建一个简单的"Hello World"样式应用程序.稍微复杂的因素是SignalR集线器需要自托管,而不是IIS/ASP.NET.据我所知,我已经让服务器端正常工作,并且它可以在端口8080上使用,但我在连接客户端时遇到了麻烦.我目前遇到的问题是SignalR客户端似乎忽略了我指定的URL上的端口.

具体来说,我在这里有这个代码:

<head runat="server">
    <script type="text/javascript" src="/Scripts/jquery-1.8.2.min.js"></script>
    <script type="text/javascript" src="/Scripts/json2.min.js"></script>
    <script type="text/javascript" src="/Scripts/jquery.signalR-0.5.3.js"></script>
    <script type="text/javascript" src="http://<%=Request.Url.Host %>:8080/signalr/hubs"></script>
    <title>SignalR Test</title>
</head>
<body>
    <script type="text/javascript">
        $(function () {

            // Wire up the client to the SignalR server on the same host 
            // as the source of this page, but on port 8080.
            $.connection.url = "http://<%=Request.Url.Host %>:8080/signalr";
            var roomHub = $.connection.roomHub;

            $('#echoButton').click(function () {
                roomHub.echo($('#echoButton').val())
                    .error(function (err) {
                        alert(err);
                    });
            });

            $.connection.hub.start({ transport: 'auto', xdomain: true })
                .done(function () {
                    console.log('Connected.');
                })
                .fail(function (e) {
                    console.log('Unable to connect:' + e);
                });
        });
    </script>
Run Code Online (Sandbox Code Playgroud)

的:8080/signalr /集线器脚本加载成功,和它看起来不错,也就是说,它对于定义roomHub的,所以我知道服务器是启动和运行.

但是,在$.connection.hub.start()运行时,似乎应该尝试打开URL的连接,例如http://app.dev.alanta.com:8080/signalr/signalr/negotiate?=1353072553935.相反,Firebug告诉我,它忽略了8080部分,而是尝试与URL http://app.dev.alanta.com/signalr/signalr/negotiate?=1353072553935协商连接.当然,这不起作用 - 没有SignalR服务侦听端口80,只是常规Web服务器 - 因此它失败并显示消息"无法连接:SignalR:协商请求期间出错".

我还应该注意,在jquery.signalR-0.5.3.js文件中,解析连接的代码确实似乎忽略了端口:

// Resolve the full url
parser.href = connection.url;
if (!parser.protocol || parser.protocol === ":") {
    connection.protocol = window.document.location.protocol;
    connection.host = window.document.location.host;
    connection.baseUrl = connection.protocol + "//" + connection.host;
}
else {
    connection.protocol = parser.protocol;
    connection.host = parser.host;
    connection.baseUrl = parser.protocol + "//" + parser.host;
}

// Set the websocket protocol
connection.wsProtocol = connection.protocol === "https:" ? "wss://" : "ws://";
Run Code Online (Sandbox Code Playgroud)

这是一个错误吗?或者我误解了什么?

Ken*_*ith 24

好吧,我可以发誓我已经尝试了这个并且它不起作用,但是当我对它进行故障排除时,我更改了此处的URL分配:

$.connection.url = "http://<%=Request.Url.Host %>:8080/signalr";
Run Code Online (Sandbox Code Playgroud)

对此:

$.connection.hub.url = "http://<%=Request.Url.Host %>:8080/signalr";
Run Code Online (Sandbox Code Playgroud)

可以肯定的是,这就是它在这里记录的方式.我以为我看到它记录了第一种方式,但我现在找不到它.那好吧.把这个问题归咎于我没有给予足够的重视.