我有一個典型的Web API控制器,它是從jscript客戶端調用的。在服務器處理請求期間,我想向一組信號客戶端發送消息,除了與當前Web API請求對應的客戶端。在信號調用的上下文之外獲取信號連接ID
我該如何獲得該連接ID,那時signalr上下文不可用? 當然,我可以讓客戶端明確地發送它與http請求的其餘參數,但我想知道是否有更優雅的方式。
我有一個典型的Web API控制器,它是從jscript客戶端調用的。在服務器處理請求期間,我想向一組信號客戶端發送消息,除了與當前Web API請求對應的客戶端。在信號調用的上下文之外獲取信號連接ID
我該如何獲得該連接ID,那時signalr上下文不可用? 當然,我可以讓客戶端明確地發送它與http請求的其餘參數,但我想知道是否有更優雅的方式。
沒有更優雅的方式。連接ID存儲在客戶端上,通常在每次使用signalr客戶端發出請求時傳遞。
我已經創建了一個庫,用於使後端服務總線和SignalR之間的縫隙更加無縫(如果已實施)。你可以不喜歡這樣,從你的WebAPI方法
eventAggregator.Publish(new MyEvent(data));
而且MyEvent
public class MyEvent : Event
{
public MyEvent(Data data)
{
this.PerformedBy = Thread.CurrentPrincipal.Identity.Name;
}
}
然後針對此事件創建一個約束處理
public class MyEventConstraint : EventConstraintHandler<Event>
{
public bool Allow(MyEvent myEvent, username, dynamic constraint)
{
return myEvent.PerformedBy != username;
}
}
您也可以使MyEvent通用以便您可以重複使用它爲您的所有實體
更多信息以及如何設置它 https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/wiki
要注意的是屬於所有客戶端的用戶表示不會得到事件