通过 WCF 发送适配器使用 WCF 服务时的注意事项

本主题介绍了在通过 WCF 适配器使用 WCF 服务时的注意事项。

在发送作为要求消息的非 XML 内容时,使用“模板 - 由模板指定的内容”选项

具有 正文 -- BizTalk 响应消息正文 的 WCF 适配器 (默认值) 选项不允许发送非 XML 消息,例如字符数据和位图图像。 可以使用 模板 -- 模板为 WCF 适配器指定的内容 选项来发送非 XML 消息。 有关如何使用模板的详细信息,请参阅 使用 WCF 接收适配器发布 WCF 服务的注意事项

如果服务地址以 开头,WCF-BasicHttp 和 WCF-WSHttp 发送端口始终忽略代理 http://localhost

如果服务地址以发送端口的“代理”选项卡或发送处理程序的“代理”选项卡上配置代理开头http://localhost,则 WCF-BasicHttp 和 WCF-WSHttp 发送端口始终忽略代理。 如果希望客户端通过代理与同一计算机上的服务进行对话,则应当使用主机名(而非 localhost)。

如果未正确配置代理设置,则 WCF-BasicHttp 和 WCF-WSHttp 发送适配器将挂起消息

可以在发送端口的“代理”选项卡上或发送处理程序的“ 代理 ”选项卡上指定 WCF-BasicHttp 和 WCF-WSHttp 发送适配器的 代理 设置。 如果未正确配置代理设置,则 WCF 适配器将挂起消息,而事件日志中会收到错误消息“There was no endpoint listening that could accept the message”。

为使用 WCF-NetMsmq 适配器的 WCF 发送端口设置权限

当采用 WCF-NetMsmq 适配器的 WCF 发送端口向 NetMsmqBinding 发布的 WCF 服务发送消息时,它会将消息发送到由服务的队列管理器管理的目标队列。 客户端上的队列管理器将消息发送至传输(或传出)队列。 传输队列是客户端队列管理器上的一个队列,用来存储要传输到目标队列的消息。

服务的队列管理器接受发送到它所拥有的目标队列的消息,并存储这些消息。 然后,服务会请求从目标队列读取消息,而队列管理器会将这些消息传送给该服务。 因此,用来承载发送端口的 BizTalk 主机实例的服务帐户应当具有写入传输队列的权限。

使用空的 XPath 表达式接收其 SOAP Body 元素内容中带有字符数据的 SOAP 消息

要求-响应 WCF 发送端口可以接收 WCF 消息作为响应消息。 若要从传入的响应消息创建 BizTalk 消息,其中包含 SOAP Body 元素内容中的字符数据,如以下示例所示,应在 WCF 适配器传输属性对话框中的“消息”选项卡上将 XPath 表达式文本框留空。

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
    <s:Header>
      ...
    </s:Header>
    <s:Body>Contoso</s:Body>
</s:Envelope>

如果选择“ 信封 ”或“ 正文 ”选项,适配器不会从传入消息创建 BizTalk 消息。 该消息不会挂起,因为在入站 SOAP 封送处理中失败的消息不会挂起。 有关如何使用“ 消息 ”选项卡上的 XPath 表达式的详细信息,请参阅 指定 WCF 适配器的消息正文

注意

可以通过配置 BTSNTSvc.exe.config 文件来使用 Windows SDK 中的 TraceViewer 工具 (SvcTraceViewer.exe)。 有关 Windows SDK 的详细信息,请参阅 中的 https://go.microsoft.com/fwlink/?LinkId=75219“Windows SDK 中的新增功能”。 有关 TraceViewer 工具的详细信息,请参阅 中的 https://go.microsoft.com/fwlink/?LinkId=75218“TraceViewer 工具 (SvcTraceViewer.exe) ”。

BizTalk Server 不使用用来描述自定义 SOAP 标头的多部分消息类型和根元素

如果在元数据中定义了自定义 SOAP 标头,则根据该元数据运行 BizTalk WCF 服务使用向导时,该向导将在生成的架构中生成根元素以表示该自定义 SOAP 标头。 该向导还会在业务流程中为自定义 SOAP 标头创建多部分消息类型。 BizTalk Server。 然而,BizTalk Server 不使用多部分消息类型和根元素来处理自定义 SOAP 标头。

若要访问自定义 SOAP 标头,应使用 InboundHeaders 属性。 有关接收自定义 SOAP 标头的详细信息,请参阅 具有已发布 WCF 服务的 SOAP 标头。 若要使用自定义 SOAP 标头,应使用 OutboundCustomHeaders 属性。 有关发送自定义 SOAP 标头的详细信息,请参阅 使用 WCF 服务的 SOAP 标头

为使用不同代理地址和/或代理凭据的发送端口创建单独的主机实例

为了使 WCF 发送适配器获得最佳性能,建议您为使用不同代理地址和/或代理凭据的发送端口创建单独的主机实例。 这样可避免对代理设置的争用。

另请参阅

BTSNTSvc.exe.config 文件