2009-05-10 2 views
1

В целях поддержки потокового видео я вернуть сообщение с переопределение OnWriteBody ...
Проблема состоит в том случае, если исключение в (тайм-аута DB или в зависимости от того) OnWriteBody
В ProvideFault в IErrorHandler не вызывается и, следовательно, у меня нет способа распространять ошибку клиенту (через фильтрацию в IErrorHandler).
Есть ли способ решить эту проблему.WCF- Обработка ошибок при потоковой передаче

Спасибо.

ответ

0

при выполнении потоковой передачи с использованием WCF Я создаю два ServiceContracts, которые выполняют потоковое вещание, которое отправит уведомление в конце потоковой передачи.

Ответ ServiceContract Я использую привязку типа дуплексного типа. Клиент, чтобы вызвать ответ ServiceContract сначала, чтобы получить билет для своей транзакции, затем позвоните в мой сервис ServiceContract. Затем в конце транзакции клиент получит уведомление об успехе или неудаче от ответа ServiceContract.



[ServiceContract] 
public interface IStreamFileService 
{ 
    [OperationContract] 
    void Upload(Stream stream); 
} 

[ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(ITransferCallback))] 
public interface IStreamFileResponseService 
{ 
    [OperationContract(IsOneWay = false, IsInitiating = true, IsTerminating = false)] 
    Guid StartUpload(); 
} 

[ServiceContract] 
public interface ITransferCallback 
{ 
    [OperationContract] 
    void OperationComplete(ResponseMessage response); 
} 

Я делаю это в двух службах, потому что мои требования и рабочий процесс требуют от меня, чтобы отслеживать многие вещи и делать аутентификации, проверку и т.д.

0

OnWriteBody вызываются, когда заголовки ответа, как 200 уже были отправлены клиенту , Там, где невозможно обработать ошибки на этом этапе. Два Обхода/трюков, которые я использовал:

  1. Дождитесь первой датой-строка перед отправкой 200 (например, перед возвращением сообщения) и перебирать дополнительные строки внутри OnWriteBody. Это будет работать, потому что большинство ошибок и тайм-аутов SQL происходит перед показом любых данных. Тем не менее, не охватывайте случаи, когда появляется ошибка во время итерации с результатом.
  2. Имейте специальный код обработки ошибок на клиенте и сервере. Например, в случае, если сервер ошибок внутри OnWriteBody может сериализовать ошибку и отправить ее как специальный Data-Row. Клиент должен ожидать такой специальный Data-Row, получая ответ и обрабатывая соответствующим образом.
Смежные вопросы