Как бросить исключение клиенту через обратный вызов 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 позволит вам продолжать использовать существующий канал.