为了支持流式传输,我将带有覆盖的消息返回给 OnWriteBody ...
问题是如果在 OnWriteBody 中抛出异常(数据库超时或其他)
IErrorHandler 中的 ProvideFault 未被调用,因此我无法将错误传播到客户端(通过 IErrorHandler 中的过滤)。
有没有办法解决这个问题。
谢谢。
最佳答案
当使用 WCF 进行流式传输时,我创建了两个 ServiceContracts 一个执行流式传输,另一个将在流式传输结束时发送通知。
响应 ServiceContract 我使用了双工类型的绑定(bind)。客户端首先调用响应 ServiceContract 以获取其交易的票证,然后调用我的传输 ServiceContract。然后在事务结束时,客户端将从响应 ServiceContract 中收到成功或失败的通知。
[ServiceContract]
public interface IStreamFileService
{
[OperationContract]
void Upload(Stream stream);
}
[ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(ITransferCallback))]
public interface IStreamFileResponseService
{
[OperationContract(IsOneWay = false, IsInitiating = true, IsTerminating = false)]
Guid StartUpload();
}
[ServiceContract]
public interface ITransferCallback
{
[OperationContract]
void OperationComplete(ResponseMessage response);
}
我在两个服务中执行此操作,因为我的需求和工作流程要求我跟踪许多事情并进行身份验证、验证等。
关于WCF-流式传输时的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/844833/