为了支持流式传输,我将覆盖的消息返回给OnWriteBody ...
问题是如果在OnWriteBody中抛出异常(数据库超时或其中任何一个)
IErrorHandler中的ProvideFault未被调用,因此我无法将错误传播到客户端(通过IErrorHandler中的过滤)。
有没有办法解决这个问题。
感谢。
答案 0 :(得分:0)
在使用WCF进行流式处理时,我创建了两个ServiceContracts,其中一个执行流式传输,将在流式传输结束时发送通知。
响应ServiceContract我使用双工类型绑定。客户端首先调用响应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);
}
我在两个服务中执行此操作,因为我的要求和工作流程要求我跟踪许多事情并进行身份验证,验证等。
答案 1 :(得分:0)
当响应标头(如200)已发送到客户端时,将调用OnWriteBody。在这个阶段不可能处理错误。 我使用过两种解决方法/技巧: