2013-08-30 5 views
0

У меня есть типичный контроллер веб-api, который вызывается из jscript-клиента. Во время обработки запроса сервером я хочу отправить сообщение группе клиентов signalr, за исключением клиента, который соответствует текущему HTTP-запросу веб-api.Получить идентификатор соединения signalr вне контекста вызова signalr

Как я могу получить идентификатор соединения в тот момент, когда контекст signalr недоступен? Конечно, я могу отправить клиент явно с остальными параметрами http-запроса, но мне было интересно, есть ли более элегантный способ.

ответ

3

Нет более элегантного способа. Идентификатор соединения хранится на клиенте и обычно передается с каждым запросом, сделанным с клиентом signalr.

0

Я создал библиотеку, чтобы сделать промежуток между вашей служебной шиной и SignalR более плавным, если вы ее внедрили. Вы могли бы сделать это так, из метода WebAPI

eventAggregator.Publish(new MyEvent(data)); 

И в MyEvent

public class MyEvent : Event 
{ 
    public MyEvent(Data data) 
    { 
     this.PerformedBy = Thread.CurrentPrincipal.Identity.Name; 
    } 
} 

Затем создайте Constraint обработчик для этого события

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

Помните, что все клиенты, принадлежащие указанному пользователю не получит событие

Смежные вопросы