我剛開始接觸SignalR VS2013所以請原諒我,如果我忽略了一些基本的超建立連接。我的目標是爲用戶提供一個「持有頁面」,直到發生特定事件,服務器端告訴該頁面讓用戶進入流程的下一個步驟。我在服務器上創建了一個Hub,當客戶端調用服務器上的調用時,該Hub似乎正常工作。SignalR不會與IIS快遞在Windows 8中使用的Chrome或IE
問題是客戶端永遠不會從服務器接收任何呼叫和從它出現在客戶端永遠不會建立到轂必要的連接的瀏覽器控制檯輸出。
我在最新的谷歌Chrome和微軟IE瀏覽器V11嘗試這個。我收到了每個瀏覽器中記錄的相同消息。
下面是微軟IE瀏覽器輸出的瀏覽器控制檯(我無法找到一個簡單的方法來保存Chrome的控制檯輸出文本):
[10:32:02 GMT-0400 (Eastern Daylight Time)] SignalR: Client subscribed to hub 'signinghub'.
[10:32:02 GMT-0400 (Eastern Daylight Time)] SignalR: Negotiating with '/signalr/negotiate?clientProtocol=1.4&connectionData=%5B%7B%22name%22%3A%22signinghub%22%7D%5D'.
[10:32:02 GMT-0400 (Eastern Daylight Time)] SignalR: Connecting to websocket endpoint 'ws://localhost:53915/signalr/connect?transport=webSockets&clientProtocol=1.4&connectionToken=orv901EJmuVZdJis9VFLBMVTl8bgZlbK5pWdAxiugZiYOCPPxytCCjewTQ%2FxcM0bMcGxDdRY6T46ApZSWnL%2BRO8kkllhVhYr1ZROWGSdyFQ2580j%2BR6lXitPVhdXncon&connectionData=%5B%7B%22name%22%3A%22signinghub%22%7D%5D&tid=8'.
[10:32:02 GMT-0400 (Eastern Daylight Time)] SignalR: Websocket opened.
[10:32:07 GMT-0400 (Eastern Daylight Time)] SignalR: webSockets timed out when trying to connect.
[10:32:07 GMT-0400 (Eastern Daylight Time)] SignalR: Closing the Websocket.
[10:32:07 GMT-0400 (Eastern Daylight Time)] SignalR: This browser doesn't support SSE.
[10:32:07 GMT-0400 (Eastern Daylight Time)] SignalR: Binding to iframe's load event.
[10:32:12 GMT-0400 (Eastern Daylight Time)] SignalR: foreverFrame timed out when trying to connect.
[10:32:12 GMT-0400 (Eastern Daylight Time)] SignalR: Stopping forever frame.
[10:32:12 GMT-0400 (Eastern Daylight Time)] SignalR: Opening long polling request to 'http://localhost:53915/signalr/connect?transport=longPolling&clientProtocol=1.4&connectionToken=orv901EJmuVZdJis9VFLBMVTl8bgZlbK5pWdAxiugZiYOCPPxytCCjewTQ%2FxcM0bMcGxDdRY6T46ApZSWnL%2BRO8kkllhVhYr1ZROWGSdyFQ2580j%2BR6lXitPVhdXncon&connectionData=%5B%7B%22name%22%3A%22signinghub%22%7D%5D&tid=4'.
[10:32:13 GMT-0400 (Eastern Daylight Time)] SignalR: Long poll complete.
[10:32:13 GMT-0400 (Eastern Daylight Time)] SignalR: Opening long polling request to 'http://localhost:53915/signalr/poll?transport=longPolling&messageId=d-65C891D3-Q%2C0%7CU%2C0%7CV%2C3%7CW%2C0&clientProtocol=1.4&connectionToken=orv901EJmuVZdJis9VFLBMVTl8bgZlbK5pWdAxiugZiYOCPPxytCCjewTQ%2FxcM0bMcGxDdRY6T46ApZSWnL%2BRO8kkllhVhYr1ZROWGSdyFQ2580j%2BR6lXitPVhdXncon&connectionData=%5B%7B%22name%22%3A%22signinghub%22%7D%5D&tid=10'.
[10:32:17 GMT-0400 (Eastern Daylight Time)] SignalR: longPolling timed out when trying to connect.
[10:32:17 GMT-0400 (Eastern Daylight Time)] SignalR: Aborted xhr request.
[10:32:17 GMT-0400 (Eastern Daylight Time)] SignalR: Stopping connection.
[10:32:17 GMT-0400 (Eastern Daylight Time)] SignalR: Fired ajax abort async = true.
我通過閱讀Introduction to SignalR並知道它將嘗試從最優選的通信技術故障轉移到最不優選的通信技術。從我可以告訴它正在嘗試所有4種方法進行溝通和失敗,最終放棄「停止連接」。信息。
我使用VS 2013和IIS Express的發展,SignalR V2.1.0和ASP.NET MVC 5
更新,包括客戶端代碼
下面是在客戶端腳本用於連接到輪轂:
<!--Reference the SignalR library. -->
<script src="~/Scripts/jquery.signalR-2.1.0.min.js" type="text/javascript"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="~/signalr/hubs"></script>
<script>
$.connection.hub.logging = true;
$(function() {
// Reference the auto-generated proxy for the hub.
var chat = $.connection.signingHub;
// Create a function that the hub can call back to redirect the user
chat.client.signDocument = function() {
// Add the message to the page.
window.location.assign("/Signing/Initiate/" + ContractID.value + "?clientUserId=" + ClientUserId.value);
};
// Start the connection.
$.connection.hub.start();
});
</script>
的詳細信息...
我發現這可能是由我從DevExpress使用的第三方組件套件引起的。我可以跟隨聊天示例here和SignalR工作良好。只要我從DevExpress添加MVC擴展控件,SignalR連接協商就會失敗。我在他們的支持論壇here上評論過一個問題,希望能得到答案。
感謝您的幫助,您可以提供!
首先你可以打從瀏覽器中signalr集線器?說http:// localhost:port/signalr/hub - 你應該看到代理,除非你禁用了它。你也可以發佈你的JavaScript如何連接到集線器? – Gjohn
@Gjohn我想代理可能被禁用(不知道如何啓用),因爲在Chrome中我得到「協議錯誤:未知的傳輸」。當瀏覽到/ signalr/hub Url並在IE中收到400錯誤請求時,在瀏覽器中發送消息。我用連接到集線器的客戶端腳本更新了問題。謝謝! – Steve
@Gjohn - 澄清:起初我使用錯誤的Url作爲代理。在訪問代理Url之後(http:// localhost:port/signalr/hubs),它返回代理。 – Steve