Как бросить исключение клиенту через обратный вызов wcf - PullRequest
1 голос
/ 17 ноября 2011

У меня есть служба wcf, которая выполняет одностороннюю операцию и отправляет результат в обратном вызове. Вот мое определение сервиса

 [ServiceContract(CallbackContract = typeof(IIrmCallback), SessionMode = SessionMode.Required)]
    public interface IFileService
    {
       [OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = false)]
       [ServiceKnownType(typeof(StatementFile))]
       [ServiceKnownType(typeof(InvoiceFile))]
       void UploadFile(IFile file);
    }

    public interface IFileCallback
    {
       [OperationContract]
       void FileProcessed(string result);
    }

public MyService : IFileService
{
  IFileCallBack callbackchannel;
  object result;
  public void UploadFile(IFile file)
{
   callbackChannel = OperationContext.Current.GetCallbackChannel<IIrmCallback>();
   Task.Factory.StartNew(() => ProcessFile(file));
}
private ProcessFile(IFile file)
{
// file gets processed
 callbackChannel.FileProcessed(result)
}
}

Так что теперь, если во время обработки файла возникает какая-то ошибка, есть ли возможность в ответ вызвать обратное вызов вызывающей стороне?

Ответы [ 2 ]

3 голосов
/ 17 ноября 2011

Вы можете использовать FaultException

Когда операция вызывает исключение, FaultException будет возвращено клиенту.

1 голос
/ 17 ноября 2011

Вам необходимо реализовать FaultContract в интерфейсе службы, указав типы ошибок, которые возможны в данном методе, а затем выдать новую ошибку, которая наследуется от FaultException внутри метода.

На клиенте убедитесь, что объекты FaultException и Exception по отдельности перехватываются и обрабатываются, поскольку исключения приводят к отказу канала WCF и его нельзя использовать повторно, в то время как исключение FaultException позволит вам продолжить использование существующего канала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...