【问题标题】:/signalr/hubs not being generated when upgrading to SignalR-2.0.0-beta2升级到 SignalR-2.0.0-beta2 时未生成 /signalr/hubs
【发布时间】:2013-07-31 07:52:29
【问题描述】:

我有一个像在 SignalR 1.1.2 上运行的应用程序这样的工作聊天,它将被放到负载平衡的服务器上,所以我需要实施一个背板解决方案来同步服务器。

这是一个 ASP.NET MVC4 .NET 4.5 应用程序。使用 SignalR 集线器,而不是持久连接。该应用在客户端使用 AngularJS 来处理 ui 绑定和更新。

我已按照here 中列出的步骤来实现 sql server 背板,并使用了here 中列出的 1.x 到 2.0 迁移中列出的步骤。解决方案已构建,但在点击使用 SignalR 的页面时,“/signalr/hubs”脚本引用返回 500 错误。

这是我到目前为止所采取的步骤列表。

  • 使用 nuget,删除了与 SignalR 1.1.2 相关的所有引用和依赖项。仔细检查 /bin 和 /packages 目录以确保它们不再引用任何旧库。这是在 github issue 上找到的与 2.0 升级相关的评论,该评论说卸载并重新安装 SignalR 是升级的方式。

  • 通过包管理器控制台 (PMC) 安装 SignalR 2.0.0-beta2 Install-Package Microsoft.AspNet.SignalR -Pre

  • 使用 PMC Install-Package Microsoft.AspNet.SignalR.SqlServer -Pre 安装 SQL Server 消息传递底板

  • 从 Global.asax 中删除了 RouteTable.Routes.MapHubs();

  • 在项目的根目录中创建了启动类。

Startup.cs

using Microsoft.AspNet.SignalR;
using Microsoft.Owin;
using Owin;

namespace My.NameSpace
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapHubs();
        }
    }
}
  • 在 Web.config 中将 <add key="owin:AppStartup" value="My.NameSpace.Startup, App_Code"/> 添加到 <appSettings>

  • 在 Startup.Configuration() 方法中放置一个断点,并验证它是否被命中并在应用启动时无异常地执行 app.MapHubs

  • 我没有使用持久连接,因此没有包含app.MapConnection<MyConnection>("/echo"); 行,也没有遇到任何模棱两可的定义问题。

  • 聊天应用页面引用了以下库

    • jquery-1.8.3.js
    • jquery.signalR-2.0.0-beta2.js
    • <script src='/signalr/hubs'></script>
    • AngularJS v1.1.5
  • 项目运行时,聊天应用页面找不到/signalr/hubs

  • chrome 开发工具返回 500 Internal Server Error 用于网络选项卡上的 /signalr/hubs 调用。

  • 文件系统没有/signalr/hubs目录

我的下一步是看看我是否可以使用非常基本的集线器创建一个新的解决方案,看看我是否可以让 Signal 2.0 正常工作。如果是这样,我将比较这两种解决方案,看看有什么区别。

有没有人知道我还可以检查或研究什么来使其正常工作?

具有类似问题的相关 StackOverflow 问题:onetwo

【问题讨论】:

    标签: c# .net asp.net-mvc angularjs signalr


    【解决方案1】:

    事实证明,通过将项目配置更改为使用本地 IIS Web 服务器而不是 Visual Studio Developer Server (Cassini) 解决了该问题。

    通过在我的浏览器中转到/signalr/hubs url 并查看服务器错误找到了原因

    System.PlatformNotSupportedException: This operation requires IIS integrated pipeline mode.

    一些谷歌搜索出现了这个page,它说错误是由 ASP.NET 开发服务器不支持集成管道模式引起的。

    您可以通过右键单击项目来更改使用的服务器,选择属性,点击 web 选项卡,然后在服务器部分选择“使用本地 IIS Web 服务器”。

    【讨论】:

    • 奇怪的是我的选项已经设置为 IIS Express (Visual Studio 2013)。我的工作原理是将选项更改为外部主机,然后恢复到 IIS Express 并且它起作用了。
    【解决方案2】:

    在我的情况下,IIS 没有正确安装。我只需要重新安装它:

    c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      相关资源
      最近更新 更多