2016-07-05 2 views
0

В одном из моих WCF-сервисов (без гражданства) я хочу отправить сообщение через SignalR. Поскольку служба не имеет статуса, а концентратор находится на другом компьютере, я подключаюсь к SignalR, отправляю сообщение и отключается.SignalR: соединение было отключено до получения результата вызова

proxy.Connect().Wait(); 
proxy.SendMessageToUsers(receiverUserNames, message).Wait(); 
proxy.Disconnect(); 

Время от времени, есть InvalidOperationExceptions (подключение было отключено, прежде чем результат вызова был получен).

Я понимаю из этого сообщения (C# SignalR Exception - Connection started reconnecting before invocation result was received) что. Подождите, это не очень хорошая идея. Но я думаю, мне нужно дождаться завершения Connect и SendMessage, прежде чем отключиться.

Итак, что еще я могу сделать?

С наилучшими пожеланиями, Стефан

ответ

0

Ошибка имеет смысл, потому что код является синхронным. Таким образом, Disconnect может быть вызван до получения результата вызова.

насчет ...

Task.Factory.StartNew(async() => { 
    await proxy.Connect(); 
    await proxy.SendMessageToUsers(receiverUserNames, message); 
    await proxy.Disconnect(); 
}); 

Таким образом, вы должны быть уверены, proxy.Disconnect() не будет называться, пока сообщение не будет отправлено.

+1

Это не имеет для меня никакого смысла. Является proxy.SendMessageToUsers (имя_принимателя, сообщение) .Wait(); не то же самое, что и ждать proxy.SendMessageToUsers (имя_пользователя-получателя, сообщение); ? – Stefan

+0

Ну, я обнаружил случаи, когда 'Wait()' не работал, но 'await' сделал. Требуется 2 секунды, чтобы попробовать. – xleon

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