2012-04-09 2 views
3

У меня есть реализация WCF, и я размещаю ее в службе Windows (самостоятельно). Я использую callback contract inorder для запуска некоторых событий на стороне клиента.
Вопрос в том, как я могу быть уверен или проверить, что клиент все еще жив для запуска своего события обратного вызова. Есть ли механизм проверки? Я использую .NET 3.5.
Спасибо.как определить, жив ли клиент для обратного вызова в wcf?

ответ

0

Нет встроенного способа.

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

Одним из возможных решений этой проблемы является here

+1

Я хочу, чтобы обнаружить его изящно. Я не хочу, чтобы это зависело от созданного исключения. Могу ли я просто передать контракт обратного вызова в ICommunicationObject, а затем проверить его состояние? Будет ли это работать? – Fer

+0

Прошу прощения, я не знаю ответа на это. –

+0

Спасибо @hugh. я буду использовать листинг CallbackContract для ICommunicationObject и проверить, открыто ли его состояние. Кстати, лучшее решение будет оценено. – Fer

0

мой подход к той же проблеме было создать класс «DefaultCallback», который реализует интерфейс обратного вызова и ничего не делать (не бросать какие-то не ImplmentedException конечно) , Тогда вы можете написать немного кода, как это:

private IServiceCallBack[] GetCallBack() 
    { 
     var returnValue = new IServiceCallBack[1]; 

     var com = (ICommunicationObject)(returnValue[0] = OperationContext.Current.GetCallbackChannel<IServiceCallBack>()); 

     com.Closing += new EventHandler((object sender, EventArgs e) => 
     { 
      returnValue[0] = new DefaultCallBack(); 
     }); 

     com.Faulted += new EventHandler((object sender, EventArgs e) => 
     { 
      returnValue[0] = new DefaultCallBack(); 
     }); 

     return returnValue; 
    } 

Таким образом, всякий раз, когда клиент обратного вызова находится в закрытом или поврежденном состоянии, оно заменяется на совместимом объект, который не делает ничего.

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