簡體   English   中英

IIS后台線程和SignalR

[英]IIS Background thread and SignalR

我需要有一個后台線程來做一些工作,並通過SignalR將數據發送給連接到服務的用戶。

我想在IIS中托管這個線程,並在首次命中Application_Start時或在單獨的工作進程中生成它。

如果我在IIS中托管它並在應用程序啟動時創建它 - 該線程僅在首次點擊應用程序時啟動。 我一開始服務就需要它運行。 - 我無法通過桌面GUI控制此線程,我無法以簡單的方式停止或暫停它。

如果我在一個單獨的進程(例如Windows服務)中托管它 - 我無法訪問SignalR服務實例 - 我不希望以用戶身份連接到SignalR服務以向其他用戶發送數據。 我想采用一種不同的方法,這並不意味着工人是SignalR本身的客戶。

你對此有何看法? 你還有其他解決方案嗎?

我們接近這個的方法是在Web服務可以調用的Web應用程序上創建一個單獨的端點。

想象一下,ASP.NET MVC控制器中存在以下URI: http:// [myserver] / api / TellUsers / [msg] 在此方法中,您可以獲取連接的集線器客戶端並進行調用。

[HttpPut]
public void TellUsers(string msg)
{
   var connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
   var demoClients = connectionManager.GetClients<MyHubDerivedClass>();
   demoClients.TellUsers(msg);
}

[在這里插入關於正確錯誤檢查的警告。]

當然,您不必使用MVC。 任何可公開訪問的URI都可以。 至於保護它,您可以使用任何有效的技術來保護ASP.NET端點。

我知道問題相當陳舊但是:

事實上,我更喜歡你所擁有的“客戶本身”的例子。 這使您可以從許多不同的點而不是一個點進行控制。 示例 - 多個服務可以調用來控制服務。 我看不出有任何理由你不能擁有能夠調用其他用戶無法調用的“特殊”命令的管理員用戶。

對於許多系統來說,這是一個久經考驗的設計。 我堅持下去。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM