BizTalk中的FaultException处理

时间:2009-08-06 14:26:47

标签: wcf biztalk

我的WCF服务的FaultContract没有datacontract成员;因此,当在BizTalk中使用服务时,生成的模式不会显示任何成员。我如何处理BizTalk?

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

如果您正在从业务流程中使用该服务,则可以尝试以下步骤:

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

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

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

  4. 在'正文路径表达'上添加 像这样的东西:

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

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

    这样做的一个副作用是在业务流程中捕获SOAP错误时遇到问题,但这可以通过创建SOAP错误(http://schemas.datacontract.org/2004/07/System.ServiceModel#ExceptionDetail)的模式表示来解决,并将其用作第二个错误操作

答案 2 :(得分:0)

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

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