2016-02-25 34 views
2

在ASP.Net MVC 5項目的根目錄中創建SignalR 2 Hub類完全正常。您可以訪問〜/ signalr/hubs url並返回代理。你也可以把這個類放在一個名爲Hubs的文件夾或類似的文件夾中,它仍然可以正常工作。只要你把全班學生分成App_Code文件特別ASP.Net文件夾,然後您會收到以下錯誤:App_Code中的SignalR Hub會導致「兩個集線器不能共享相同的名稱」錯誤

Exception Details: System.InvalidOperationException: Two Hubs must not share the same name. 'SignalR_MVC.EchoHub, SignalRQuickTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' and 'SignalR_MVC.EchoHub, App_Code.gjrzytie, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' both share the name 'echo'.

在一個側面說明,從Compile設置類Build ActionContent導致錯誤走開,一切正常。我已閱讀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將能夠揭示這種情況,並可能分享他們的「最佳實踐」建議。

+0

遇到同樣的問題,但更糟糕的方式。我使用的是.net 4 vs 2010的signalr 1.2.2。使用fiddler在6小時後發現了錯誤,然後再現了它。發生在ReflectedHubDescriptorProvider類,第44行(BuildHubsCache方法)。 –

+0

感謝您的評論,設法找到答案!讓我知道如果有幫助 – Storm

回答

2

因此,事實證明,如果您在除了WebForms之外的任何應用程序中使用App_Code文件夾(甚至僅適用於Web表單),那麼您會非常調皮,因爲這是您可以簡單地添加代碼頁的地方(即使在生活中服務器),他們會在運行時編譯。

作爲一項規則,您絕對不應該將App_Code文件夾用於實際的系統代碼,它應該僅適用於您的Web表單。

我們創建了一個名爲_Code的單獨文件夾,並將我們的代碼放置在所有項目中,並禁止使用App_Code,甚至將其添加到我們的新僱傭工具包中(因爲我們不再使用WebForms)以確保沒有人再次被困在那裏。

希望有一天能幫助別人失去靈魂。

+0

非常有價值的信息!謝謝! – Howard

相關問題