【问题标题】:FaultException handling in BizTalkBizTalk 中的 FaultException 处理
【发布时间】:2009-08-06 14:26:46
【问题描述】:

我的 WCF 服务中的 FaultContract 没有数据合同成员;因此,当在 BizTalk 中使用服务时,生成的架构不会显示任何成员。在 BizTalk 中如何处理?

在从 .NET 客户端使用此 WCF 服务时,实现提供了异常以及(数据对象的)类库,我发现了该异常类型的错误。

【问题讨论】:

    标签: wcf biztalk


    【解决方案1】:

    我不确定这是否可能。但要让它工作,biztalk 必须能够访问包含您的数据对象的 dll。您可以尝试从您的 biztalk 项目中引用 dll。

    【讨论】:

    • 我可以让 BizTalk 引用该程序集。请您进一步指导我的实施...例如如何将故障异常(端口)绑定到该异常类型/架构?
    【解决方案2】:

    如果您正在使用编排中的服务,您可以尝试以下步骤:

    1. 添加您的 XSD 表示 FaultContract 到项目并使用 这是你的错的消息类型 操作。

    2. 将异常处理程序块添加到 使用此故障的编排 作为消息类型的操作

    3. 在您的双向 WCF SendPort 上转到 消息选项卡,然后打开 '入站 BizTalk 消息正文' 将单选按钮更改为路径。

    4. 在“身体路径表达式”上添加 像这样:

      /* [命名空间-uri()='http://myservice.namespace/'] | /* [local-name()='Fault'] /* [local-name()='Detail']/*

    这两个 xpath 用“|”分隔将使适配器根据它接收到的内容发布正确的服务回复或放置 WCF FaultContract 的详细信息节点的内容。这将允许反汇编程序在尝试识别消息时工作。

    这样做的副作用是,您将无法在编排中捕获 SOAP 错误,但可以通过创建 SOAP 错误 (http://schemas.datacontract.org/2004/07/System.ServiceModel#ExceptionDetail) 的模式表示并将其用作第二个错误操作来解决此问题。

    【讨论】:

      【解决方案3】:

      我发现了问题。我们的 Web 服务以小写形式返回错误 XML。所以正确的 XPath 是

      /*[local-name()='Fault']/*[local-name()='detail']/*
      

      【讨论】:

      • 这其实是SOAP 1.1和SOAP 1.2的区别
      猜你喜欢
      • 1970-01-01
      • 2013-05-07
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      相关资源
      最近更新 更多