2013-02-20 72 views
3

我一直在試圖獲得一個javascript信號-r客戶端與自託管的owin服務器工作。我遇到了這個問題。我已經嘗試了兩個代理和沒有代理方法,都帶有與錯誤「SignalR:協商請求期間的錯誤:未定義」相同的結果。SignalR:協商請求期間出錯:undefined

我已經能夠獲得跨域樣本運行沒有任何問題,並不能找出我做錯了什麼,任何人有任何想法?

瀏覽器控制檯獲取日誌嘗試協商,然後我得到失敗。

服務器/集線器

namespace SignalROwinHost 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string url = "http://localhost:9000/"; 
      using (WebApplication.Start<Startup>(url)) 
      { 
       Console.WriteLine("Server running on {0}", url); 
       Console.ReadLine(); 
      } 
     } 

     public class Startup 
     { 
      public void Configuration(IAppBuilder app) 
      { 
       app.MapHubs(); 
      } 

     } 

     public class ChatHub : Hub 
     { 
      public void Send(string message) 
      { 
       Clients.All.send(message); 
      } 
     } 
    } 
} 

的Javascript(無代理):

<script type="text/javascript"> 
    $(function() { 
     var connection = $.hubConnection('http://localhost:9000'); 
     var chat = connection.createHubProxy('chatHub'); 
     chat.on('send', function (message) { 
      $('#chat').html($('#chat').html() + "\r\n" + message); 
     }); 
     connection.logging = true; 
     connection.start().done(function() { 
      alert("Connection Complete"); 
      $('#sendBtn').click(function() { 
       chat.invoke('send', $('#message').val()); 
      }); 
     }).fail(function (param) { alert(param); }); 
    }); 
</script> 

使用Javascript(代理):

<script src="http://localhost:9000/signalr/hubs" type="text/javascript"></script> 
     <script type="text/javascript"> 
     $(function() { 
      var chat = $.connection.chatHub; 
      chat.client.send = function (message) { 
       alert(message); 
      }; 

      $.connection.hub.logging = true; 

      $.connection.hub.url = "http://localhost:9000/signalr"; 

      $.connection.hub.start() 
       .done(function (param) { 
        chat.server.send("Connected"); 
       }) 
       .fail(function (param) { 
        alert("Could not Connect: " + param); 
       }); 
     }); 

    </script> 

回答

4

如果您正在使用SignalR 1.0.0(這您應該自從現在正式發佈以來),您需要將呼叫更改爲MapHubs以啓用跨域請求。這是假設您的網站是而不是由localhost:9000提供。我猜這是因爲你傳遞的網址爲$.hubConnection

app.MapHubs(new HubConfiguration { EnableCrossDomain = true }); 

在最終版本1.0.0之前,默認情況下啓用了CORS。

+0

這正是我所錯過的,謝謝。 – JMorgan 2013-02-21 14:46:26

+0

我擁有所有這些東西,它適用於所有瀏覽器,但在IE 10中不起作用。任何想法? – Bhavin 2013-04-09 18:04:38