2009-08-06 63 views
0

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

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

回答

0

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

+0

我可以让BizTalk引用该程序集。请你指导我进一步实现......比如如何将错误异常(端口)绑定到该异常类型/模式? – Muralidhar 2009-08-06 18:04:28

0

如果从业务流程消耗的服务,您可以尝试以下步骤:

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

  2. 使用此故障 操作消息类型

  3. 在您的双向WCF发送端口去 邮件选项卡,然后在 “入境BizTalk消息正文”添加一个异常处理程序块 编排 将单选按钮更改为路径。

  4. 在 '身体路径表达式' 添加 是这样的:

    /* [命名空间URI()= 'http://myservice.namespace/'] |/* [本地名称()= '故障']/* [本地名称()= '详情']/*

这些两个XPath由分开的 '|'将使适配器根据接收到的内容发布正确的服务应答或WCF FaultContract所在的详细信息节点的内容。这将允许反汇编程序在尝试识别消息时工作。

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

0

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

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

这实际上是SOAP 1.1和SOAP 1.2之间的区别 – 2013-11-08 13:59:21

相关问题