У меня есть реализация WCF, и я размещаю ее в службе Windows (самостоятельно). Я использую callback contract inorder для запуска некоторых событий на стороне клиента.
Вопрос в том, как я могу быть уверен или проверить, что клиент все еще жив для запуска своего события обратного вызова. Есть ли механизм проверки? Я использую .NET 3.5.
Спасибо.как определить, жив ли клиент для обратного вызова в wcf?
3
A
ответ
0
Нет встроенного способа.
Если клиент не будет доступен для обработки обратного вызова, то ваша служба либо зависает, либо генерирует исключение при попытке вызвать обратный вызов клиента (в зависимости от состояния канала обратного вызова).
Одним из возможных решений этой проблемы является here
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;
}
Таким образом, всякий раз, когда клиент обратного вызова находится в закрытом или поврежденном состоянии, оно заменяется на совместимом объект, который не делает ничего.
Смежные вопросы
- 1. WCF - Как определить, жив ли сервер?
- 2. Как проверить, жив ли клиент Pyro4
- 3. Как узнать, жив ли клиент или нет
- 4. Как использовать результат обратного вызова в WCF?
- 5. Как определить, жив ли источник потоковой передачи?
- 6. WCF - Может ли интерфейс обратного вызова указываться как общий?
- 7. Как определить, жив ли другой локальный компьютер?
- 8. Проверить доступность службы обратного вызова WCF
- 9. PHP-сервер сокетов, проверьте, жив ли клиент
- 10. Определить идентификатор пользователя в OAuth обратного вызова
- 11. Отладка службы обратного вызова WCF
- 12. Служба обратного вызова WCF для клиента php
- 13. Функция обратного вызова WCF MSMQ
- 14. TransactionScope и WCF обратного вызова
- 15. Является ли Hearbeat хорошей опцией для проверки, что клиент жив в недолгом сервисе wcf?
- 16. WCF DuplexChannel - соединение без обратного вызова
- 17. Как настроены ограничения размера обратного вызова WCF?
- 18. Определить время для обратного вызова node.js
- 19. Определить метод обратного вызова glDebugMessageCallbackARB
- 20. Как реализовать функцию обратного вызова wcf в flex-клиенте
- 21. WCF Дуплексный канал: проверьте, доступен ли канал обратного вызова
- 22. Канал обратного вызова WCF преждевременно удаляется?
- 23. Метод обратного вызова WCF для клиента с возвращаемым значением
- 24. Как определить, когда клиент WCF не смог правильно закрыть?
- 25. Выполнять клиент Javascript после обратного вызова RadAjax
- 26. Установить SendTimeout в привязке обратного вызова клиента WCF?
- 27. Метеор: как проверить, жив ли экземпляр шаблона?
- 28. WCF TimeoutException с использованием каналов обратного вызова
- 29. Как определить функцию для реализации обратного вызова в JSDoc?
- 30. EndpointNotFoundException при создании обратного вызова службы WCF
Я хочу, чтобы обнаружить его изящно. Я не хочу, чтобы это зависело от созданного исключения. Могу ли я просто передать контракт обратного вызова в ICommunicationObject, а затем проверить его состояние? Будет ли это работать? – Fer
Прошу прощения, я не знаю ответа на это. –
Спасибо @hugh. я буду использовать листинг CallbackContract для ICommunicationObject и проверить, открыто ли его состояние. Кстати, лучшее решение будет оценено. – Fer