我有一个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)
}
}
那么现在如果在文件处理过程中有一些错误,我是否可以在回调中抛出一个异常回调给调用者?
您可以使用FaultException
当操作抛出异常时,将向客户端返回FaultException。
您需要在您的服务接口中实现FaultContract,指定在给定方法中可能出现的错误类型,然后抛出从该方法中的FaultException继承的新错误。
在客户端,确保分别捕获和处理FaultException和Exception对象,因为Exception将导致WCF通道出现故障,并且无法重用,而FaultException将允许您继续使用现有的通道。