SignalR:协商请求期间出错:未定义 [英] SignalR: Error during negotiation request: undefined

查看:40
本文介绍了SignalR:协商请求期间出错:未定义的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在尝试让javascript Signal-r客户机在自托管owin服务器上工作。我遇到了这个问题。我已经尝试了代理方法和无代理方法,结果都是相同的,结果都是"SignalR:Error During Neighting Request:UNDEFINED"(协商请求期间出现SignalR:Error)错误。

我已经能够让跨域示例正常运行,没有任何问题,但找不到我做错了什么,有人有什么想法吗?

浏览器控制台获取尝试协商的日志,然后我获得失败。

服务器/集线器

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() + "
" + 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>

推荐答案

如果您使用的是SignalR 1.0.0(现在正式发布,您应该这么做),您需要将调用更改为MapHubs才能开启跨域请求。这里假设您的网站而不是由localhost:9000提供服务。我猜不是,因为您正在将URL传递给$.hubConnection

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

1.0.0最终版本之前,默认启用CORS。

这篇关于SignalR:协商请求期间出错:未定义的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆