$.connection.hub.start().done(function () {
// Wire up Send button to call NewContosoChatMessage on the server.
$('#newContosoChatMessage').click(function () {
contosoChatHubProxy.server.newContosoChatMessage(
$('#displayname').val(), $('#message').val());
$('#message').val('').focus();
如果在仍然引用 SignalR 对象时连接停止,也会出现此错误。
“301 永久移动”或“302 暂时移动”错误
如果项目包含名为 SignalR 的文件夹,则可能会出现此错误,该文件夹将干扰自动创建的代理。 若要避免此错误,请不要在应用程序中使用名为 SignalR
的文件夹,或关闭自动生成代理。 有关更多详细信息 ,请参阅生成的代理及其用途 。
.NET 或 Silverlight 客户端中的“403 禁止访问”错误
此错误可能发生在未正确启用跨域通信的跨域环境中。 有关如何启用跨域通信的信息,请参阅 如何建立跨域连接。 若要在 Silverlight 客户端中建立跨域连接,请参阅 从 Silverlight 客户端建立跨域连接。
“404 找不到”错误
此问题有多种原因。 验证以下所有内容:
中心代理地址引用的格式不正确: 如果对生成的中心代理地址的引用的格式不正确,则通常会看到此错误。 验证是否已正确引用中心地址。 有关详细信息 ,请参阅如何引用动态生成的代理 。
在添加中心路由之前,将路由添加到应用程序: 如果应用程序使用其他路由,请验证添加的第一个路由是否是对 的 MapHubs
调用。
“500 内部服务器错误”
这是一个非常通用的错误,原因可能有多种。 错误的详细信息应显示在服务器的事件日志中,或者可以通过调试服务器找到。 可以通过在服务器上启用详细错误来获取更详细的错误信息。 有关详细信息,请参阅 如何处理中心类中的错误。
“TypeError: <hubType> is undefined”错误
如果未正确调用 , MapHubs
则会导致此错误。 有关详细信息 ,请参阅如何注册 SignalR 路由和配置 SignalR 选项 。
JsonSerializationException 未由用户代码处理
验证发送到方法的参数是否不包含不可序列化的类型, (如文件句柄或数据库连接) 。 如果需要在服务器端对象上使用不希望发送到客户端的成员, (出于安全性或序列化) 的原因,请使用 JSONIgnore
属性。
“协议错误:未知传输”错误
如果客户端不支持 SignalR 使用的传输,则可能会发生此错误。 有关哪些浏览器可用于 SignalR 的信息,请参阅 传输和回退 。
“JavaScript 中心代理生成已禁用。”
如果 DisableJavaScriptProxies
设置了 ,同时在 中也包括对动态生成的代理 signalr/hubs
的引用,则会发生此错误。 有关手动创建代理的详细信息,请参阅 生成的代理及其用途。
如果使用身份验证,并且客户端在连接停止之前已注销,则可能会看到此错误。 解决方法是在注销客户端之前停止 SignalR 连接。
“未捕获错误:SignalR: jQuery 未找到。 请确保在SignalR.js文件“错误之前引用 jQuery
SignalR JavaScript 客户端要求运行 jQuery。 验证对 jQuery 的引用是否正确、使用的路径是否有效,以及对 jQuery 的引用是否在对 SignalR 的引用之前。
“未捕获的 TypeError: 无法读取未定义的属性'<property>'”错误
此错误是由于未正确引用 jQuery 或中心代理。 验证对 jQuery 和中心代理的引用是否正确、使用的路径是否有效,以及对 jQuery 的引用是否在对中心代理的引用之前。 对中心代理的默认引用应如下所示:
正确引用中心代理的 HTML 客户端代码
<script src="/signalr/hubs"></script>
“RuntimeBinderException 未由用户代码处理”错误
使用 不正确的重载 Hub.On
时,可能会发生此错误。 如果方法具有返回值,则必须将返回类型指定为泛型类型参数:
在客户端 (上定义的方法,没有生成的代理)
MyHub.On<ReturnType>("MethodName", LocalMethod);
连接 ID 不一致或页面加载之间的连接中断
此行为是设计使然。 由于中心对象托管在页面对象中,因此在页面刷新时会销毁中心。 多页应用程序需要维护用户和连接 ID 之间的关联,以便它们在页面加载之间保持一致。 连接 ID 可以存储在服务器上 ConcurrentDictionary
对象或数据库中。
“值不能为 null”错误
当前不支持具有可选参数的服务器端方法;如果省略可选参数,该方法将失败。 有关详细信息,请参阅可选参数。
Firebug 中的“Firefox 无法在地址>处与服务器<建立连接”错误
如果 WebSocket 传输协商失败,而是使用另一个传输,则可以在 Firebug 中看到此错误消息。 此行为是设计使然。
.NET 客户端应用程序中的“远程证书根据验证过程无效”错误
如果服务器需要自定义客户端证书,则可以在发出请求之前将 x509certificate 添加到连接。 使用 Connection.AddClientCertificate
将证书添加到连接。
身份验证超时后连接断开
此行为是设计使然。 连接处于活动状态时,无法修改身份验证凭据;若要刷新凭据,必须停止并重启连接。
使用 jQuery Mobile 时,将调用 OnConnected 两次
jQuery Mobile 的 initializePage
函数强制重新执行每个页面中的脚本,从而创建第二个连接。 此问题的解决方案包括:
在 JavaScript 文件之前包括对 jQuery Mobile 的引用。
initializePage
通过设置 $.mobile.autoInitializePage = false
禁用函数。
等待页面完成初始化,然后再启动连接。
使用服务器发送事件在 Silverlight 应用程序中延迟消息
在 Silverlight 上使用服务器发送的事件时,消息会延迟。 若要强制改用长轮询,请在启动连接时使用以下方法:
connection.Start(new LongPollingTransport());
使用 Forever Frame 协议的“权限被拒绝”
这是一个已知问题, 如此处所述。 可以使用最新的 JQuery 库看到此症状;解决方法是将应用程序降级到 JQuery 1.8.2。
编译和服务器端错误
以下部分包含编译器和服务器端运行时错误的可能解决方案。
对中心实例的引用为 null
由于是为每个连接创建中心实例,因此无法自行在代码中创建中心实例。 若要从中心本身外部调用中心上的方法,请参阅 如何从中心类外部调用客户端方法和管理组 ,了解如何获取对中心上下文的引用。
HTTPContext.Current.Session 为 null
此行为是设计使然。 SignalR 不支持 ASP.NET 会话状态,因为启用会话状态会中断双工消息传送。
没有合适的方法可替代
如果使用旧版文档或博客中的代码,可能会看到此错误。 验证是否未引用已更改或已弃用的方法的名称, (如 OnConnectedAsync
) 。
HostContextExtensions.WebSocketServerUrl 为 null
此行为是设计使然。 此成员已弃用,不应使用。
“名为'signalr.hubs'的路由已在路由集合中”错误
如果 MapHubs
应用程序调用了两次 ,则会出现此错误。 一些示例应用程序直接在全局应用程序文件中调用 MapHubs
;另一些示例应用程序在包装类中调用 。 确保应用程序不会同时执行这两项操作。
Visual Studio 问题
本部分介绍 Visual Studio 中遇到的问题。
“脚本文档”节点未显示在解决方案资源管理器
调试时,我们的一些教程会将你定向到 解决方案资源管理器 中的“脚本文档”节点。 此节点由 JavaScript 调试器生成,仅在 Internet Explorer 中调试浏览器客户端时显示;如果使用 Chrome 或 Firefox,则不会显示 节点。 如果另一个客户端调试器(如 Silverlight 调试器)正在运行,JavaScript 调试器也不会运行。
SignalR 不适用于 Visual Studio 2008 或更早版本
此行为是设计使然。 SignalR 需要.NET Framework 4 或更高版本;这需要在 Visual Studio 2010 或更高版本中开发 SignalR 应用程序。
IIS 问题
本部分包含 Internet Information Services 的问题。
MapHubs 调用后网站崩溃
此问题已在最新版本的 SignalR 中修复。 通过使用 NuGet 更新安装,验证是否正在使用最新发布的 SignalR 版本。
Azure 问题
本部分包含 Microsoft Azure 的问题。
更改主题名称后,不会通过 Azure 底板接收消息
Azure 底板使用的主题不适合用户配置。