App_Code中的SignalR Hub导致“两个集线器不能共享同一个名称”错误

时间:2016-02-25 11:29:41

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

在ASP.Net MVC 5项目的根目录中创建SignalR 2 Hub类非常合适。您可以访问〜/ signalr / hubs url并返回代理。您还可以将该类放在名为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 ActionCompile设置为Content会导致错误消失,一切正常。我已经阅读了App_Code文件夹上的所有文档,但它没有提到有关创建2 dll的任何内容(这是在这里发生的事情),尽管发布应用程序只创建了1个dll,并且在部署到IIS时它们都工作正常

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

1 个答案:

答案 0 :(得分:2)

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

通常,您不应该将App_Code文件夹用于实际的系统代码,它应仅适用于您的Web表单。

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

希望有一天能帮助其他一些失去的灵魂。