【发布时间】:2009-08-06 14:26:46
【问题描述】:
我的 WCF 服务中的 FaultContract 没有数据合同成员;因此,当在 BizTalk 中使用服务时,生成的架构不会显示任何成员。在 BizTalk 中如何处理?
在从 .NET 客户端使用此 WCF 服务时,实现提供了异常以及(数据对象的)类库,我发现了该异常类型的错误。
【问题讨论】:
我的 WCF 服务中的 FaultContract 没有数据合同成员;因此,当在 BizTalk 中使用服务时,生成的架构不会显示任何成员。在 BizTalk 中如何处理?
在从 .NET 客户端使用此 WCF 服务时,实现提供了异常以及(数据对象的)类库,我发现了该异常类型的错误。
【问题讨论】:
我不确定这是否可能。但要让它工作,biztalk 必须能够访问包含您的数据对象的 dll。您可以尝试从您的 biztalk 项目中引用 dll。
【讨论】:
如果您正在使用编排中的服务,您可以尝试以下步骤:
添加您的 XSD 表示 FaultContract 到项目并使用 这是你的错的消息类型 操作。
将异常处理程序块添加到 使用此故障的编排 作为消息类型的操作
在您的双向 WCF SendPort 上转到 消息选项卡,然后打开 '入站 BizTalk 消息正文' 将单选按钮更改为路径。
在“身体路径表达式”上添加 像这样:
/* [命名空间-uri()='http://myservice.namespace/'] | /* [local-name()='Fault'] /* [local-name()='Detail']/*
这两个 xpath 用“|”分隔将使适配器根据它接收到的内容发布正确的服务回复或放置 WCF FaultContract 的详细信息节点的内容。这将允许反汇编程序在尝试识别消息时工作。
这样做的副作用是,您将无法在编排中捕获 SOAP 错误,但可以通过创建 SOAP 错误 (http://schemas.datacontract.org/2004/07/System.ServiceModel#ExceptionDetail) 的模式表示并将其用作第二个错误操作来解决此问题。
【讨论】:
我发现了问题。我们的 Web 服务以小写形式返回错误 XML。所以正确的 XPath 是
/*[local-name()='Fault']/*[local-name()='detail']/*
【讨论】: