升级 SignalR 1.x 项目到 SignalR 2

作者 :Patrick Fletcher

警告

本文档不适用于最新版本的 SignalR。 查看 ASP.NET Core SignalR

本主题介绍如何将现有 SignalR 1.x 项目升级到 SignalR 2.x,以及如何排查升级过程中可能出现的问题。

本教程中使用的软件版本

通过本教程使用 Visual Studio 2012

若要在本教程中使用 Visual Studio 2012,请执行以下操作:

  • 包管理器 更新到最新版本。
  • 安装 Web 平台安装程序
  • 在 Web 平台安装程序中,搜索并安装 ASP.NET 和 Web 工具 2013.1 for Visual Studio 2012。 这将为 SignalR 类(例如 Hub)安装 Visual Studio 模板。
  • 某些模板 ((如 OWIN 启动类) )将不可用;对于这些,请改用类文件。

问题和评论

请留下反馈,说明你对本教程的喜爱程度,以及我们可以在页面底部的评论中改进的内容。 如果你有与本教程不直接相关的问题,可以将其发布到 ASP.NET SignalR 论坛StackOverflow.com

SignalR 2 使用 OWIN 跨服务器平台提供一致的开发体验。 本文介绍将 SignalR 1.x 应用程序更新到版本 2 所需的几个步骤。

虽然建议将应用程序升级到 SignalR 2,但仍支持 SignalR 1.x。

本教程介绍如何将 Web 托管的应用程序升级到 SignalR 2。 SignalR 2 现在支持自承载应用程序 (在控制台应用程序、Windows 服务或其他进程) 中托管服务器的自承载应用程序。 有关如何开始使用 SignalR 2 创建自承载应用程序的信息,请参阅 教程:SignalR 自承载

目录

以下部分介绍升级 SignalR 项目所涉及的任务,以及如何排查可能出现的问题。

示例:将 入门 教程应用程序升级到 SignalR 2

在本部分中,你将更新在 入门 教程的 SignalR 1.x 版本中创建的应用程序,以使用 SignalR 2。

  1. 完成入门教程后,右键单击项目,然后选择“属性”。 验证目标框架是否设置为 .NET Framework 4.5。

  2. 打开包管理器控制台。 使用以下命令从项目中删除 SignalR 1.x:

    Uninstall-Package Microsoft.AspNet.SignalR -RemoveDependencies
    
  3. 使用以下命令安装 SignalR 2:

    Install-Package Microsoft.AspNet.SignalR
    
  4. 在 HTML 页中,更新 SignalR 的脚本引用,以匹配项目中现在包含的脚本版本。

    <!--Reference the SignalR library. -->
    <script src="Scripts/jquery.signalR-2.1.0.min.js"></script>
    
  5. 在全局应用程序类中,删除对 MapHubs 的调用。

    protected void Application_Start(object sender, EventArgs e)
    {
        RouteTable.Routes.MapHubs();
    }
    
  6. 右键单击解决方案,然后选择“ 添加”、“ 新建项...”。在对话框中,选择“ Owin 启动类”。 将新类命名为 Startup.cs

    显示“添加新项”对话框的屏幕截图。已选择“OWIN 启动类”,并且“名称”字段中为“启动点 C”。

  7. 将 Startup.cs 的内容替换为以下代码:

    using Microsoft.Owin;
    using Owin;
    
    [assembly: OwinStartup(typeof(SignalRChat.Startup))]
    namespace SignalRChat
    {
       
        public class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                app.MapSignalR();
            }
        }
    }
    

    程序集属性将 类添加到 Owin 的启动进程,该进程在 Owin 启动时执行 Configuration 方法。 这反过来又调用 MapSignalR 方法,该方法为应用程序中的所有 SignalR 中心创建路由。

  8. 运行项目,并将main页的 URL 复制到另一个浏览器或浏览器窗格中,就像以前一样。 每个页面都将要求提供用户名,并且从每个页面发送的消息应在两个浏览器窗格中可见。

排查升级期间遇到的错误

本部分介绍升级期间可能出现的问题。 有关 SignalR 应用程序可能发生的错误和问题的更全面列表,请参阅 SignalR 故障排除

“以下方法或属性之间的调用不明确”

如果未删除对 的 Microsoft.AspNet.SignalR.Owin 引用,则会发生此错误。 此包已弃用;必须删除 引用,并且必须卸载 SelfHost 包的 1.x 版本。

中心方法以无提示方式失败

验证客户端中的脚本引用是否为最新,以及 Startup 类的 OwinStartup 属性是否具有项目的正确类和程序集名称。 此外,请尝试在浏览器中打开中心地址 (/signalr/hubs) ;出现的任何错误都将提供有关问题的详细信息。