我最近/从SignalR 0.5.3升级/升级到1.0.x rc2,我在创建连接时遇到问题。
问题是我遇到了例外:
TypeError:res为null
connection.appRelativeUrl = res.Url;
我创建连接的脚本已经被剥离回到默认的演示代码:
var connection = $.connection('/signalr');
connection.start(function () {
console.log("connection started!");
});
我仍然得到错误。当我进入jquery.signalr.js文件时,我点击了连接代码:
var url = connection.url + "/negotiate";
connection.log("Negotiating with '" + url + "'.");
$.ajax({
url: url,
global: false,
cache: false,
type: "GET",
data: {},
dataType: connection.ajaxDataType,
error: function (error) {
$(connection).triggerHandler(events.onError, [error.responseText]);
deferred.reject("SignalR: Error during negotiation request: " + error.responseText);
// Stop the connection if negotiate failed
connection.stop();
},
success: function (res) {
var keepAliveData = connection.keepAliveData;
connection.appRelativeUrl = res.Url;
我到了最后一行,res参数为null,这是对我的连接尝试的轰炸。我已更新所有signalR依赖项,更改了所有中心客户端调用以使用集线器中的其他客户端/服务器属性。
我的/ signalr / hubs js脚本正在创建,并且具有映射到我希望可用的服务器端集线器方法的所有正确方法。 js文件如下:
/*!
* ASP.NET SignalR JavaScript Library v1.0.0
* http://signalr.net/
*
* Copyright Microsoft Open Technologies, Inc. All rights reserved.
* Licensed under the Apache 2.0
* https://github.com/SignalR/SignalR/blob/master/LICENSE.md
*
*/
/// <reference path="..\..\SignalR.Client.JS\Scripts\jquery-1.6.4.js" />
/// <reference path="jquery.signalR.js" />
(function ($, window) {
/// <param name="$" type="jQuery" />
"use strict";
if (typeof ($.signalR) !== "function") {
throw new Error("SignalR: SignalR is not loaded. Please ensure jquery.signalR-x.js is referenced before ~/signalr/hubs.");
}
var signalR = $.signalR;
function makeProxyCallback(hub, callback) {
return function () {
// Call the client hub method
callback.apply(hub, $.makeArray(arguments));
};
}
function registerHubProxies(instance, shouldSubscribe) {
var key, hub, memberKey, memberValue, subscriptionMethod;
for (key in instance) {
if (instance.hasOwnProperty(key)) {
hub = instance[key];
if (!(hub.hubName)) {
// Not a client hub
continue;
}
if (shouldSubscribe) {
// We want to subscribe to the hub events
subscriptionMethod = hub.on;
}
else {
// We want to unsubscribe from the hub events
subscriptionMethod = hub.off;
}
// Loop through all members on the hub and find client hub functions to subscribe/unsubscribe
for (memberKey in hub.client) {
if (hub.client.hasOwnProperty(memberKey)) {
memberValue = hub.client[memberKey];
if (!$.isFunction(memberValue)) {
// Not a client hub function
continue;
}
subscriptionMethod.call(hub, memberKey, makeProxyCallback(hub, memberValue));
}
}
}
}
}
$.hubConnection.prototype.createHubProxies = function () {
var proxies = {};
this.starting(function () {
// Register the hub proxies as subscribed
// (instance, shouldSubscribe)
registerHubProxies(proxies, true);
this._registerSubscribedHubs();
}).disconnected(function () {
// Unsubscribe all hub proxies when we "disconnect". This is to ensure that we do not re-add functional call backs.
// (instance, shouldSubscribe)
registerHubProxies(proxies, false);
});
proxies.chatHub = this.createHubProxy('chatHub');
proxies.chatHub.client = { };
proxies.chatHub.server = {
exitChat: function (chatId) {
/// <summary>Calls the ExitChat method on the server-side ChatHub hub. Returns a jQuery.Deferred() promise.</summary>
/// <param name=\"chatId\" type=\"String\">Server side type is System.String</param>
return proxies.chatHub.invoke.apply(proxies.chatHub, $.merge(["ExitChat"], $.makeArray(arguments)));
},
getChat: function (chatId) {
/// <summary>Calls the GetChat method on the server-side ChatHub hub. Returns a jQuery.Deferred() promise.</summary>
/// <param name=\"chatId\" type=\"String\">Server side type is System.String</param>
return proxies.chatHub.invoke.apply(proxies.chatHub, $.merge(["GetChat"], $.makeArray(arguments)));
},
joinChat: function (chatId, inviteeUserIds, groupId) {
/// <summary>Calls the JoinChat method on the server-side ChatHub hub. Returns a jQuery.Deferred() promise.</summary>
/// <param name=\"chatId\" type=\"String\">Server side type is System.String</param>
/// <param name=\"inviteeUserIds\" type=\"Object\">Server side type is System.String[]</param>
/// <param name=\"groupId\" type=\"String\">Server side type is System.String</param>
return proxies.chatHub.invoke.apply(proxies.chatHub, $.merge(["JoinChat"], $.makeArray(arguments)));
},
sendChatMessage: function (chatId, messageId, message) {
/// <summary>Calls the SendChatMessage method on the server-side ChatHub hub. Returns a jQuery.Deferred() promise.</summary>
/// <param name=\"chatId\" type=\"String\">Server side type is System.String</param>
/// <param name=\"messageId\" type=\"String\">Server side type is System.String</param>
/// <param name=\"message\" type=\"String\">Server side type is System.String</param>
return proxies.chatHub.invoke.apply(proxies.chatHub, $.merge(["SendChatMessage"], $.makeArray(arguments)));
},
typing: function (chatId, isTyping) {
/// <summary>Calls the Typing method on the server-side ChatHub hub. Returns a jQuery.Deferred() promise.</summary>
/// <param name=\"chatId\" type=\"String\">Server side type is System.String</param>
/// <param name=\"isTyping\" type=\"\">Server side type is System.Boolean</param>
return proxies.chatHub.invoke.apply(proxies.chatHub, $.merge(["Typing"], $.makeArray(arguments)));
}
};
proxies.debugHub = this.createHubProxy('debugHub');
proxies.debugHub.client = { };
proxies.debugHub.server = {
registerWithDebugger: function () {
/// <summary>Calls the RegisterWithDebugger method on the server-side DebugHub hub. Returns a jQuery.Deferred() promise.</summary>
return proxies.debugHub.invoke.apply(proxies.debugHub, $.merge(["RegisterWithDebugger"], $.makeArray(arguments)));
}
};
proxies.groupHub = this.createHubProxy('groupHub');
proxies.groupHub.client = { };
proxies.groupHub.server = {
joinGroup: function (userId, groupId) {
/// <summary>Calls the JoinGroup method on the server-side GroupHub hub. Returns a jQuery.Deferred() promise.</summary>
/// <param name=\"userId\" type=\"String\">Server side type is System.String</param>
/// <param name=\"groupId\" type=\"String\">Server side type is System.String</param>
return proxies.groupHub.invoke.apply(proxies.groupHub, $.merge(["JoinGroup"], $.makeArray(arguments)));
},
joinGroups: function (userId) {
/// <summary>Calls the JoinGroups method on the server-side GroupHub hub. Returns a jQuery.Deferred() promise.</summary>
/// <param name=\"userId\" type=\"String\">Server side type is System.String</param>
return proxies.groupHub.invoke.apply(proxies.groupHub, $.merge(["JoinGroups"], $.makeArray(arguments)));
},
leaveGroup: function (userId, groupId) {
/// <summary>Calls the LeaveGroup method on the server-side GroupHub hub. Returns a jQuery.Deferred() promise.</summary>
/// <param name=\"userId\" type=\"String\">Server side type is System.String</param>
/// <param name=\"groupId\" type=\"String\">Server side type is System.String</param>
return proxies.groupHub.invoke.apply(proxies.groupHub, $.merge(["LeaveGroup"], $.makeArray(arguments)));
}
};
proxies.userHub = this.createHubProxy('userHub');
proxies.userHub.client = { };
proxies.userHub.server = {
registerUserClient: function (userId) {
/// <summary>Calls the RegisterUserClient method on the server-side UserHub hub. Returns a jQuery.Deferred() promise.</summary>
/// <param name=\"userId\" type=\"String\">Server side type is System.String</param>
return proxies.userHub.invoke.apply(proxies.userHub, $.merge(["RegisterUserClient"], $.makeArray(arguments)));
},
updateUserClientStatus: function (userId, latestHeartbeat, latestInteractivity) {
/// <summary>Calls the UpdateUserClientStatus method on the server-side UserHub hub. Returns a jQuery.Deferred() promise.</summary>
/// <param name=\"userId\" type=\"String\">Server side type is System.String</param>
/// <param name=\"latestHeartbeat\" type=\"Object\">Server side type is System.DateTime</param>
/// <param name=\"latestInteractivity\" type=\"Object\">Server side type is System.DateTime</param>
return proxies.userHub.invoke.apply(proxies.userHub, $.merge(["UpdateUserClientStatus"], $.makeArray(arguments)));
}
};
return proxies;
};
signalR.hub = $.hubConnection("/signalr", { useDefaultPath: false });
$.extend(signalR, signalR.hub.createHubProxies());
}(window.jQuery, window));
有什么想法吗?
答案 0 :(得分:0)
原来上面的代码没有任何问题。从SignalR 0.5.3到1.0.x的迁移毫无障碍。问题是我的Dev环境非常糟糕。
在我们的案例中有一个MASSIVE陷阱 - 我们也在使用RavenDB。不同版本的NewtonSoft JSON都存在依赖关系。
如果您正处于同时使用这两种技术的情况,请注意将以前版本的NewtonsoftJson中格式化的JSON对象从一个传递到另一个,因为生成的JSON序列化对象不向后兼容。 / p>
从Raven传递到SignalR js客户端时,您必须手动映射它们。