我有一個簡單的應用程序,它使用幾個集線器,一些在同一個項目中,另一個在另一個類庫中,並且一切正常。現在我想嘗試使用CSharpCodeProvider.CompileAssemblyFromSource加載在運行時創建的集線器,並讓我的客戶端與該集線器進行通信。它沒有顯示在/ signalr/hubs /中。SignalR IAssemblyLocator重寫不會觸發
由於幾件事情我想獲得工作,我試圖使用自定義IAssemblyLocator一個如下所述:
https://github.com/SignalR/SignalR/wiki/Extensibility
但我GetAssemblies()的代碼不會被調用據我所知。這是我的Global.asax.cs:
protected void Application_Start()
{
GlobalHost.DependencyResolver.Register(typeof(IAssemblyLocator),() => new AssemblyLocator());
var config = new HubConfiguration
{
EnableCrossDomain = true
};
RouteTable.Routes.MapHubs(config);
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
和定製IAssemblyLocator:
public class AssemblyLocator : IAssemblyLocator
{
public IList<Assembly> GetAssemblies()
{
throw new Exception("I will break stuff");
IList<Assembly> allAsms = BuildManager.GetReferencedAssemblies().Cast<Assembly>().ToList();
foreach(Assembly asm in HubFactory.HubAssemblies)
{
allAsms.Add(asm);
}
return allAsms;
}
}
正如你可以看到我做的是拋出異常的第一件事,只是爲了證明這段代碼被稱爲,但它不會被拋出。使用此代碼後,我的應用程序將繼續正常工作,並且我的頁面/客戶端仍可以將消息發送到我的集線器。
爲了背景,我想使用一個連接,使用在運行時創建的集線器而不是編譯時,在同一個網頁上工作幾個單獨的數據饋送。所以我需要能夠在運行時創建和加載集線器,並將它顯示在/ signalr/hubs /中。我很確定我的運行時創建的集線器是OK的 - 我已經將生成的代碼放入常規的.cs文件並在編譯時包含它,然後在/ signalr/hubs中顯示OK。由於共享連接,似乎無法使用具有一個集線器的組。我應該能夠使用GetHubContext(string)來查找我的運行時創建的集線器。
歡迎任何想法!
工作就像一個魅力,謝謝! – isaidNO