【问题标题】:WCF- Error handling when streamingWCF-流式传输时的错误处理
【发布时间】:2015-06-06 15:27:48
【问题描述】:

为了支持流式传输,我将带有覆盖的消息返回到 OnWriteBody...
问题是是否在 OnWriteBody 中抛出异常(数据库超时或其他)
IErrorHandler 中的 ProvideFault 未被调用,因此我无法将错误传播到客户端(通过 IErrorHandler 中的过滤)。
有没有办法解决这个问题。

谢谢。

【问题讨论】:

    标签: wcf error-handling streaming


    【解决方案1】:

    当使用 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);
    }
    
    

    我在两个服务中执行此操作,因为我的需求和工作流程要求我跟踪许多事情并进行身份验证、验证等。

    【讨论】:

      【解决方案2】:

      当响应标头(例如 200)已经发送到客户端时调用 OnWriteBody。在这个阶段不可能处理错误。 我使用过的两种解决方法/技巧:

      1. 在发送 200 之前等待第一个数据行(就像在返回消息之前一样)并在 OnWriteBody 中迭代更多行。这将起作用,因为大多数 SQL 错误和超时发生在显示任何数据之前。不过,不包括在结果集迭代时出现错误的情况。
      2. 在客户端和服务器上有特殊的错误处理代码。就像,如果 OnWriteBody 内部的错误服务器可能会序列化错误并将其作为特殊的 Data-Row 发送。客户端在接收响应时应该期待这种特殊的 Data-Row 并进行相应的处理。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-24
        • 2013-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-25
        • 2013-03-23
        相关资源
        最近更新 更多