2014-01-29 51 views
1

我想使用SignalR与跨域,但我在调用启动函数时收到错误消息。错误消息是"Uncaught TypeError: Cannot call method 'start' of undefined "使用SignalR与跨域

我使用的代码 服务器端:

[装配:OwinStartup(typeof运算(SignalRChat.Startup))]

namespace SignalRChat 
{ 
    public class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      app.Map("/signalr", map => 
      {    
       map.UseCors(CorsOptions.AllowAll); 
       var hubConfiguration = new HubConfiguration 
       {     
        EnableJSONP = true 
       };    
       map.RunSignalR(hubConfiguration); 
      }); 
     } 
    } 
} 




    Client side code. 



<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title></title> 
    <script src="/Scripts/jquery-1.6.4.min.js"></script> 
    <script src="/Scripts/jquery.signalR-1.1.4.min.js"></script> 
</head> 
<body> 
    <div></div> 
    <script type="text/javascript"> 
    var connection = $.connection.hub.url ='http://localhost:9370/signalr';  
    connection.hub.start() 
     .done(function() { 
      alert('Now connected, connection ID=' + connection.id); 
     }); 
    </script> 
    </body> 
    </html> 
+2

请您可以添加的JavaScript,尤其在你的集线器/连接上调用start()? – penderi

回答

0

我相信你应该启用像服务器跨域这一点,SignalR 1.x的

var config = new HubConfiguration 
    { 
     EnableCrossDomain = true 
    }; 

对于singalR 2.X看here

+0

它显示错误......错误信息是“Microsoft.AspNet.SignalR.HubConfiguration”不包含'EnableCrossDomain'的定义“ –

+0

您正在使用哪个版本的signalR? –

+0

我使用SignalR 2.0。 –

1

我很迟,但只是浏览安博SignalR,以及刚刚发现这个问题了,所以现在回答吧..

connection.hub.start() 
     .done(function() { 
      alert('Now connected, connection ID=' + connection.id); 
     }); 

错的是你开始枢纽connection.hub.start() ..但在实际需要启动连接而不是集线器connection.start()

connection.start() 
     .done(function() { 
      alert('Now connected, connection ID=' + connection.id); 
     }); 

,如果你想跨域SignalR这是工作代码的形式我的项目..

  var con = $.hubConnection('http://localhost:50000/signalR');         
      var hub = con.createHubProxy('DataExchangeHub');   

      hub.on('OnMsgReceiveAll', function (message) { 
       $('#message1').append('<li>' + message + '</li>'); 
      }); 
      hub.on('OnMsgReceiveClient', function (message) { 
       $('#message2').append('<li>' + message + '</li>'); 
      }); 
      hub.on('OnMsgReceiveServer', function (message) { 
       $('#message3').append('<li>' + message + '</li>'); 
      }); 

      con.start({ jsonp: true}).done(function() { 
       $('#sendToAll').click(function() { 
        hub.invoke('BroadcastToAll', $('#msg').val()); 
       }); 
       $('#sendToClient').click(function() { 
        hub.invoke('BroadcastToClient', $('#msg').val()); 
       }); 
       $('#sendToServer').click(function() { 
        hub.invoke('BroadcastToServer', $('#msg').val()); 
       }); 
      }); 

     });