如何通过wcf回调向客户端抛出异常

时间:2011-11-17 18:04:17

标签: wcf exception-handling callback

我有一个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 个答案:

答案 0 :(得分:3)

您可以使用FaultException

当操作抛出异常时,将向客户端返回FaultException。

答案 1 :(得分:1)

您需要在服务接口中实现FaultContract,指定该给定方法中可能存在的故障类型,然后在方法中抛出一个继承FaultException的新故障。

在客户端上,确保单独捕获并处理FaultException和Exception对象,因为Exceptions会导致WCF通道出错并且无法重用,而FaultException将允许您继续使用现有通道。