2012-12-03 2 views
0

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

На интерфейсе обратного вызова, у меня есть что-то вроде этого

[OperationContract(IsOneWay = true)] 
void Work(...); 

Что лучший подход:

  1. Реализовать NotifyServer(int clientId, string message) сообщение о том, что клиент может позвонить, чтобы сообщить пользователю, что запрошенной операции не удалось,
  2. Если я установил IsOneWay = false в рабочий договор, должен ли я звонить каждому клиенту в потоке BackgroundWorker, чтобы сохранить пользовательский интерфейс отзывчивым?
  3. Реализация асинхронных операций на сервере? Как это будет работать? Я могу сгенерировать асинхронную операцию на клиенте, должен ли я использовать один и тот же шаблон (, EndWork) для метода обратного вызова клиента?

не могу думать ни о чем другом, потому что бросать FaultException на стороне клиента, когда IsOneWay = true не будет работать.

Любые советы?

Спасибо заранее!

ответ

0

Объявление 1. Это один из способов сделать это ... рекомендуется, если Work() может занять непредсказуемое количество времени, и вы не хотите, чтобы на этом вызове висел ваш сервер.

Объявление 2. Вы должны всегда выполнять операции WCF в фоновом работнике и никогда не находиться в потоке пользовательского интерфейса. Если вы установите IsOneWay = False, то, очевидно, метод Work() будет блокироваться на сервере, пока он не завершит выполнение на удаленном компьютере клиент и возвращает результаты. Однако даже если вы установите isOneWay = true, метод все равно будет блокироваться на низкоуровневой связи WCF. Если соединение WCF будет удалено, это может занять много времени, прежде чем вы получите уведомление.

Объявление 3. Образец зависит только от вас. Пример: MSDN: OperationContractAttribute.AsyncPattern Property

Нет лучшего решения. Все зависит от вашей настройки (классы, темы и т. Д.). Слой WCF, который вы кодируете, должен быть простым и удобным в использовании - это основная направляющая строка.

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