【问题标题】:SignalR Hub in App_Code causes "Two Hubs must not share the same name" errorApp_Code 中的 SignalR 集线器导致“两个集线器不得共享相同名称”错误
【发布时间】:2016-02-25 11:29:40
【问题描述】:

在 ASP.Net MVC 5 项目的根目录中创建 SignalR 2 Hub 类非常有效。您可以访问 ~/signalr/hubs 网址并返回代理。您也可以将该类放在名为 Hubs 或类似的文件夹中,它仍然可以正常运行。只要将类放入 App_Code 特殊的 ASP.Net 文件夹,就会出现以下错误:

异常详细信息:System.InvalidOperationException:两个集线器不得共享相同的名称。 'SignalR_MVC.EchoHub, SignalRQuickTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' 和 'SignalR_MVC.EchoHub, App_Code.gjrzytie, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'回声'。

附带说明,将 Build Action 类从 Compile 设置为 Content 会导致错误消失并且一切正常。我已经阅读了App_Code 文件夹上的所有文档,但它没有提到任何关于创建 2 个 dll 的内容(这就是这里发生的事情),尽管发布应用程序只会创建 1 个 dll,并且在部署到 IIS 时一切正常。

我发现了这个错误报告:Two Hubs must not share the same name,但此人从未跟进,他们关闭了该错误。我还发现了这个 SO 帖子An unhandled exception : Two Hubs must not share the same name,但虽然它看起来很相似,但据我所知并不相同。我找不到任何其他甚至模糊相似的东西,所以我希望知道 SignalR / App_Code 的人能够对这种情况有所了解,并可能分享他们的“最佳实践”建议。

【问题讨论】:

  • 遇到了同样的问题,但情况更糟。我在.net 4 vs 2010中使用signalr 1.2.2。使用fiddler 6小时后发现错误,然后重现它。发生在 ReflectedHubDescriptorProvider 类中,第 44 行(BuildHubsCache 方法)。
  • 感谢您的评论,已找到答案!让我知道这是否有帮助

标签: c# asp.net-mvc-5 signalr-hub


【解决方案1】:

事实证明,如果您在除 WebForms 之外的任何东西中使用 App_Code 文件夹(即使那样仅用于 Web 表单),您将非常顽皮,因为您可以在此处简单地添加代码页(即使在实时服务器上) ) 并且它们会在运行时编译。

作为一项规则,您永远不应该将 App_Code 文件夹用于实际的系统代码,它应该只用于您的 Web 表单。

我们创建了一个名为 _Code 的单独文件夹,并将所有项目的代码放在其中,并禁止使用 App_Code,甚至将其添加到我们的新招聘工具包中(因为我们不再使用 WebForms)以确保没有人得到再次被困在那里。

希望这一天能帮助其他一些迷失的灵魂。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多