【问题标题】:SIGNALR: $.connection.hub.start() results in "Error parsing negotiate response."SIGNALR:$.connection.hub.start() 导致“解析协商响应时出错”。
【发布时间】:2015-07-03 11:41:34
【问题描述】:

我最近在我的 MVC5/AngularJS 应用程序中实现并运行了基本的 SignalR 功能,但是在搁置和取消搁置更改后,我现在在 $.connection.hub.start() 中协商连接时遇到错误。

我已将代码精简到最基本的部分,但仍然出现此错误。在发出协商请求的 jquery.signalR-2.2.0.js 中四处寻找,我发现从 ajax 请求返回到 http://localhost:44379/signalr/negotiate?clientProtocol=1.5&connectionData=[] 的结果是返回页面的 HTML 而不是 JSON 数据!

            connection._.negotiateRequest =  /* This is on line 659 */ signalR.transports._logic.ajax(connection, {
                url: url, // http://localhost:44379/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%5D
                error: function (error, statusText) {
                    // Irrelevant code removed.
                },
                success: function (result) { // We get here at least...
                    var res,
                        keepAliveData,
                        protocolError,
                        transports = [],
                        supportedTransports = [];

                    try {
                        res = connection._parseResponse(result); // This fails because result contains HTML.
                    } catch (error) { 
                        // error.message is "Unexpected token <"
onFailed(signalR._.error(resources.errorParsingNegotiateResponse, error), connection);
                        return;
                    }

这是我用于建立集线器/连接的 javascript:

$(function () {

  var hub = $.connection.testHub;

  if (hub)
    console.log("SignalR hub initialized.");

  $.connection.hub.start().done(function () {

    console.log("SignalR connection established.");

  }).fail(function (err) {
    console.log("Error starting SignalR connection: " + err); // Ends up here.
  });

});

以及脚本引用(我在一个名为 messing.js 的单独 js 文件中有信号器代码):

  <script src="~/assets/js/signalr/jquery.signalR-2.2.0.js"></script>
  <script src="~/Scripts/messaging/messaging.js"></script>
  <script src="~/signalr/hubs"></script>

我真的不明白为什么来自 signalr/negotiate 的 ajax 响应会返回 HTML 而不是 JSON。我已经使用 [AllowAnonymous] 将服务器端集线器代码剥离为一个空类,以确保其中没有任何内容导致问题。我在 Startup.cs 中有 app.MapSignalR() 调用。我的第一个想法,因为这发生在上架和下架之后,是什么东西没有进入架子而丢失了,但我似乎找不到任何丢失的东西......

有人有什么想法吗?

【问题讨论】:

    标签: ajax json asp.net-mvc-5 signalr signalr-hub


    【解决方案1】:

    我在使用 web.config 中的规则时发现了问题。 以前,我对信号器有这个规则:

    &lt;add input="{REQUEST_URI}" matchType="Pattern" pattern="/signalr/hubs" negate="true" /&gt;

    我认为更改模式允许与 /signalr/negotiate 进行通信:

    &lt;add input="{REQUEST_URI}"      matchType="Pattern"     pattern="^/(signalr)"   negate="true"/&gt;

    ...我不知道以前是如何工作的。

    【讨论】:

    • 嗨,你能告诉我在 web.config.. 中实际添加这段代码 sn-p 的位置吗?
    猜你喜欢
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    相关资源
    最近更新 更多