【问题标题】:use SignalR with cross domain将 SignalR 与跨域一起使用
【发布时间】:2014-01-29 12:57:47
【问题描述】:

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

我正在使用代码 服务器端:

[程序集: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>

【问题讨论】:

  • 请您在集线器/连接上添加 javascript,尤其是 start() 调用?

标签: javascript signalr


【解决方案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());
              });
          });

      });

【讨论】:

    【解决方案2】:

    我相信你应该在这样的服务器上为 SignalR 1.x 启用跨域

    var config = new HubConfiguration
        {
            EnableCrossDomain = true
        };
    

    对于 singalR 2.x,请查看 here

    【讨论】:

    • 它显示错误......错误消息是“Microsoft.AspNet.SignalR.HubConfiguration'不包含'EnableCrossDomain'的定义”
    • 您使用的是什么版本的 signalR?
    • 我正在使用 SignalR 2.0。
    • 我的答案是 1.X 版本,2.0 版本我建议你看here
    猜你喜欢
    • 2013-07-12
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    相关资源
    最近更新 更多