Как бросить исключение клиенту через обратный вызов wcf

У меня есть служба 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 ответа

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

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

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

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

Другие вопросы по тегам