Tôi đang cố gắng kết hợp ứng dụng kiểu "Hello World" đơn giản với SignalR. Các yếu tố hơi phức tạp là các trung tâm SignalR cần phải được tự lưu trữ, không phải trong IIS/ASP.NET. Tôi đã làm việc phía máy chủ, cho đến khi tôi có thể nói, và nó có sẵn trên cổng 8080, nhưng tôi gặp sự cố khi kết nối máy khách. Vấn đề tôi đang gặp phải ở thời điểm hiện tại là máy khách SignalR dường như đang bỏ qua cổng trên URL mà tôi chỉ định.Máy khách SignalR js dường như đang bỏ qua cổng url
Cụ thể, tôi đã có mã này ở đây:
<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>
Các: 8080/signalr/hub tải kịch bản thành công, và nó có vẻ tốt, ví dụ, nó có định nghĩa cho roomHub
trong nó, vì vậy Tôi biết rằng máy chủ đang hoạt động.
Tuy nhiên, khi $.connection.hub.start()
chạy, có vẻ như là nên thử mở một kết nối cho URL giống như http://app.dev.alanta.com:8080/signalr/signalr/negotiate?=1353072553935. Thay vào đó, Firebug nói với tôi rằng nó bỏ qua phần 8080, và thay vào đó là cố gắng thương lượng một kết nối với URL http://app.dev.alanta.com/signalr/signalr/negotiate?=1353072553935. Và tất nhiên, điều đó không hiệu quả - không có dịch vụ SignalR nghe trên cổng 80, chỉ là máy chủ web thông thường - vì vậy nó không thành công với thông báo "Không thể kết nối: SignalR: Lỗi trong khi yêu cầu thương lượng".
Tôi cũng nên lưu ý rằng trong file jquery.signalR-0.5.3.js, các bit mã mà phân tích ra kết nối dường như thực sự để bỏ qua các cổng:
// 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://";
Đây có phải là một lỗi ? Hay tôi đã hiểu lầm điều gì đó?
Thông tin này chắc chắn bị thiếu trong wiki hiện tại. –