如何配置 WCF-WSHttp 接收位置

可以编程方式或使用 BizTalk 管理控制台配置 WCF-WSHttp 接收位置。

配置属性

使用 BizTalk 浏览器对象模型,您可以通过编程方式创建和配置接收位置。 BizTalk 资源管理器对象模型公开具有 TransportTypeData 读/写属性的IReceiveLocation 接收位置配置接口。 此属性以 XML 字符串的名称-值对形式接受 WCF-WSHttp 接收位置配置属性包。 若要在 BizTalk 资源管理器对象模型中设置此属性,必须设置 IReceiveLocation 接口的 InboundTransportLocation 属性。

无需设置 IReceiveLocation 接口的 TransportTypeData 属性。 如果不设置此属性,WCF-WSHttp 适配器将使用 WCF-WSHttp 接收位置配置的默认值,如下表所示。

下表列出了可在 BizTalk 浏览器对象模型中为 WCF-WSHttp 接收位置设置的配置属性。

属性名称 类型 说明
标识 XML Blob

例如:

<identity>

<userPrincipalName value=“username@contoso.com” />

</身份>
指定此接收位置提供的服务的标识。 可以为 Identity 属性指定的值因安全配置而异。 通过这些设置,客户端可对此接收位置进行验证。 在客户端与服务进行握手的过程中,Windows Communication Foundation (WCF) 基础结构将确保预期服务的标识与此元素的值保持一致。

默认值为空字符串。
OpenTimeout System.TimeSpan 指定一个时间跨度值来表示为完成信道打开操作提供的时间间隔。

默认值:00:01:00
SendTimeout System.TimeSpan 指定一个时间跨度值来表示为完成发送操作提供的时间间隔。 如果使用请求-响应接收端口,则此值指定完成整个交互的时间跨度(即使客户端返回一条大消息)。

默认值:00:01:00
CloseTimeout System.TimeSpan 指定一个时间跨度值来表示为完成信道关闭操作提供的时间间隔。

默认值:00:01:00
MaxReceivedMessageSize Integer 指定网络上可接收的消息的最大大小(包括标头),以字节为单位。 消息的大小受为每条消息分配的内存量的限制。 你可以使用此属性来降低受拒绝服务 (DoS) 攻击的可能性。

默认值:65536
MessageEncoding 枚举

- 文本 - 使用短信编码器。
- Mtom - 使用消息传输优化机制 1.0 (MTOM) 编码器。
指定用于对 SOAP 消息进行编码的编码器。

默认值: Text
TextEncoding 枚举

- unicodeFFF - Unicode BigEndian 编码。
- utf-16 - 16 位编码。
- utf-8 - 8 位编码
指定在 MessageEncoding 属性设置为 Text 时用于在绑定上发出消息的字符集编码。

默认值: utf-8
EnableTransaction Boolean 指定是否使用从客户端流入的事务将消息提交给 MessageBox 数据库。 如果此属性为 True,则客户端需要使用 WS-AtomicTransaction 协议提交消息。 如果客户端提交事务作用域之外的消息,则此接收位置将向客户端返回一个异常,并且不会挂起任何消息。

该选项只可用于单向接收位置。 如果客户端为请求-响应接收位置提交事务上下文中的消息,则会向客户端返回一个异常,并且不会挂起任何消息。

默认值:30False
MaxConcurrentCalls Integer 指定针对单个服务实例的并发调用的数目。 超出此限制的调用将在队列中排队。 此属性的范围是从 1 到 Int32.MaxValue。 默认值:200
SecurityMode 枚举

- 无
- 消息
- 运输
- TransportWithMessageCredential

有关 SecurityMode 属性的成员名称的详细信息,请参阅 UI 指南和开发人员 API 命名空间参考中的“WCF-WSHttp 传输属性”对话框、“接收、安全性”选项卡中的“安全模式”属性。
指定使用的安全类型。

默认值: Message
TransportClientCredentialType 枚举

- 无
- 基本
- Ntlm
- Windows
- 证书

有关 TransportClientCredentialType 属性的成员名称的详细信息,请参阅 UI 指南和开发人员 API 命名空间参考中的 WCF-WSHttp 传输属性对话框中的“接收、安全性”选项卡中的传输客户端凭据类型属性。
指定执行客户端验证时要使用的凭据类型。

默认值: Windows
MessageClientCredentialType 枚举

- 无
- Windows
- 用户
- 证书

有关 MessageClientCredentialType 属性的成员名称的详细信息,请参阅 UI 指南和开发人员 API 命名空间参考中的 WCF-WSHttp 传输属性对话框中的“接收、安全性”选项卡中的消息客户端凭据类型属性。
指定使用基于消息的安全性对客户端执行验证时所用的凭据类型。

默认值: Windows
AlgorithmSuite 枚举

有关 AlgorithmSuite 属性的成员名称的详细信息,请参阅 UI 指南和开发人员 API 命名空间参考中的 WCF-WSHttp 传输属性对话框、接收和安全性选项卡中的算法套件属性。
指定消息加密和密钥包装算法。 这些算法与“安全策略语言”(WS-SecurityPolicy) 规范中指定的算法一致。

默认值: Basic256
NegotiateServiceCredential Boolean 指定是在带外客户端提供服务凭据,还是通过协商过程从服务将服务凭据提供给客户端。 这种协商是正常消息交换的前提。

如果 MessageClientCredentialType 属性等于 NoneUsernameCertificate,则将此属性设置为 False 意味着服务证书在带外客户端可用,并且客户端需要指定服务证书。 此模式可与实现 WS-Trust 和 WS-SecureConversation 的 SOAP 堆栈交互操作。

如果 MessageClientCredentialType 属性设置为 Windows,则将此属性设置为 False 将指定基于 Kerberos 的身份验证。 这意味着客户端和服务必须是相同 Kerberos 域的一部分。 此模式可与实现 Kerberos 令牌配置文件(如 OASIS WSS TC 中所定义)以及 WS-Trust 和 WS-SecureConversation 的 SOAP 堆栈交互操作。

如果此属性为 True,则会导致 .NET SOAP 协商通过 SOAP 消息通过隧道进行 SPNego 交换。

默认值:True
EstablishSecurityContext Boolean 指定安全通道是否建立安全会话。 安全会话将在交换应用程序消息之前建立安全上下文令牌 (SCT)。

默认值:True
ServiceCertificate 字符串 为此接收位置指定 X.509 证书的指纹,客户端利用该指纹验证服务。 要用于此属性的证书必须安装到“当前用户”位置的“我的存储”中。 注意: 对于托管此接收位置的接收处理程序,必须将服务证书安装到用户帐户的 “当前用户 ”位置。

默认值为空字符串。
UseSSO Boolean 指定是否使用企业单一登录 (SSO) 检索客户端凭据以颁发 SSO 票证。 有关支持 SSO 的安全配置的详细信息,请参阅 UI 指南和开发人员 API 命名空间参考中的 WCF-WSHttp 传输属性对话框、接收、安全性选项卡中的“企业单一 Sign-On WCF-WSHttp 接收适配器的可支持性”部分。
InboundBodyLocation 枚举

- UseBodyElement - 使用传入消息的 SOAP Body 元素的内容创建 BizTalk 消息正文部分。 如果 Body 元素具有多个子元素,则只有第一个元素成为 BizTalk 消息正文部分。
- UseEnvelope - 从传入消息的整个 SOAP 信封 创建 BizTalk 消息正文部分。
- UseBodyPath - 使用 InboundBodyPathExpression 属性中的正文路径表达式创建 BizTalk 消息正文部分。 针对传入消息的 SOAP Body 元素的直接子元素计算正文路径表达式。 此属性仅对要求-响应端口有效。

有关如何使用 InboundBodyLocation 属性的详细信息,请参阅 指定 WCF 适配器的消息正文
指定传入 WCF 消息的 SOAP Body 元素的数据选择。

默认值: UseBodyElement
InboundBodyPathExpression 字符串

有关如何使用 InboundBodyPathExpression 属性的详细信息,请参阅 WCF 适配器属性架构和属性
指定正文路径表达式以标识传入消息中用于创建 BizTalk 消息正文部分的特定部分。 此正文路径表达式是针对传入消息的 SOAP Body 节点的直接子元素计算的。 如果此正文路径表达式返回多个节点,则只选择第一个节点作为 BizTalk 消息正文部分。 如果将 InboundBodyLocation 属性设置为 UseBodyPath,则需要此属性。

默认值为空字符串。
InboundNodeEncoding 枚举

- Base64 - Base64 编码。
- 十六进制 - 十六进制编码。
- 字符串 - 文本编码 - UTF-8。
- XML - WCF 适配器使用 InboundBodyPathExpression 中的正文路径表达式选择的节点的外部 XML 创建 BizTalk 消息正文。
指定 WCF-WSHttp 接收适配器用于解码 由 InboundBodyPathExpression 中指定的正文路径表达式标识的节点的编码类型。 如果将 InboundBodyLocation 属性设置为 UseBodyPath,则需要此属性。

默认值: XML
OutboundBodyLocation 枚举

- UseBodyElement - 使用 BizTalk 消息正文部件为传出响应消息创建 SOAP Body 元素的内容。
- UseTemplate - 使用 OutboundXMLTemplate 属性中提供的模板为传出响应消息创建 SOAP Body 元素的内容。

有关如何使用 OutboundBodyLocation 属性的详细信息,请参阅 指定 WCF 适配器的消息正文
指定传出 WCF 消息的 SOAP Body 元素的数据选择。 此属性仅对请求响应接收位置有效。

默认值: UseBodyElement
OutboundXMLTemplate 字符串

有关如何使用 OutboundXMLTemplate 属性的详细信息,请参阅 指定 WCF 适配器的消息正文
为传出响应消息的 SOAP Body 元素的内容指定 XML 格式的模板。 如果 OutboundBodyLocation 属性设置为 UseTemplate,则需要此属性。 此属性仅对请求响应接收位置有效。

默认值为空字符串。
SuspendMessageOnFailure Boolean 指定是否将由于接收管道故障或路由故障而导致入站处理失败的请求消息挂起。

默认值:True
IncludeExceptionDetailInFaults Boolean 指定是否将托管异常信息包括在返回给客户端以便进行调试的 SOAP 错误的详细信息中。

默认值: False

使用 BizTalk 管理控制台配置 WCF-WSHttp 接收位置

您可以在 BizTalk 管理控制台中设置 WCF-WSHttp 接收位置适配器变量。 如果未设置接收位置的属性,则使用 BizTalk 管理控制台中设置的默认接收处理程序值。

注意

在完成以下过程之前,必须已添加接收端口。 有关详细信息,请参阅 如何创建接收端口

为 WCF-WSHttp 接收位置配置变量

  1. 在 BizTalk 管理控制台中,依次展开“BizTalk Server管理”、“BizTalk 组”、“应用程序”,然后展开要在其中创建接收位置的应用程序。

  2. 在 BizTalk 管理控制台的左窗格中,单击“接收端口” 节点。 随后,在右窗格中右键单击与现有接收位置关联的接收端口或要与新接收位置关联的接收端口,然后单击“属性”

  3. 在“ 接收端口属性 ”对话框的左窗格中,选择“ 接收位置”,然后在右窗格中双击现有接收位置,或单击“ 新建”创建新的接收位置。

  4. 在“接收位置属性”对话框的“类型”旁边的“传输”部分中,从下拉列表中选择“WCF-WSHttp”,然后单击“配置”。

  5. “WCF-WSHttp 传输属性 ”对话框中的“ 常规 ”选项卡上,为 WCF-WSHttp 接收位置配置终结点地址和服务标识。 有关 WCF-WSHttp 传输属性对话框中的“常规”选项卡的详细信息,请参阅 UI 指南和开发人员 API 命名空间参考中的 WCF-WSHttp 传输属性对话框、接收、常规选项卡。

  6. “WCF-WSHttp 传输属性 ”对话框中的“ 绑定 ”选项卡上,配置超时、编码和事务属性。 有关 WCF-WSHttp 传输属性对话框中的“绑定”选项卡的详细信息,请参阅 UI 指南和开发人员 API 命名空间参考中的 WCF-WSHttp 传输属性对话框、接收、绑定选项卡。

  7. “WCF-WSHttp 传输属性 ”对话框中的“ 安全性 ”选项卡上,定义 WCF-WSHttp 接收位置的安全功能。 有关 WCF-WSHttp 传输属性对话框中的“安全性”选项卡的详细信息,请参阅 UI 指南和开发人员 API 命名空间参考中的 WCF-WSHttp 传输属性对话框、接收、安全性选项卡。

  8. “WCF-WSHttp 传输属性 ”对话框中的“ 消息 ”选项卡上,指定 SOAP 正文 元素的数据选择。 有关 WCF-WSHttp 传输属性对话框中的“消息”选项卡的详细信息,请参阅 UI 指南和开发人员 API 命名空间参考中的 WCF-WSHttp 传输属性对话框、接收消息选项卡。

以编程方式配置 WCF-WSHttp 接收位置

可使用以下格式设置属性:

<CustomProps>  
  <InboundBodyPathExpression vt="8" />  
  <InboundBodyLocation vt="8">UseBodyElement</InboundBodyLocation>  
  <UseSSO vt="11">0</UseSSO>  
  <MessageClientCredentialType vt="8">Windows</MessageClientCredentialType>  
  <SendTimeout vt="8">00:01:00</SendTimeout>  
  <OutboundXmlTemplate vt="8"><bts-msg-body xmlns="http://www.microsoft.com/schemas/bts2007" encoding="xml"/></OutboundXmlTemplate>  
  <OpenTimeout vt="8">00:01:00</OpenTimeout>  
  <AlgorithmSuite vt="8">Basic256</AlgorithmSuite>  
  <SecurityMode vt="8">Message</SecurityMode>  
  <TransportClientCredentialType vt="8">Windows</TransportClientCredentialType>  
  <NegotiateServiceCredential vt="11">-1</NegotiateServiceCredential>  
  <MaxReceivedMessageSize vt="3">2097152</MaxReceivedMessageSize>  
  <TextEncoding vt="8">utf-8</TextEncoding>  
  <CloseTimeout vt="8">00:01:00</CloseTimeout>  
  <SuspendMessageOnFailure vt="11">0</SuspendMessageOnFailure>  
  <EnableTransaction vt="11">0</EnableTransaction>  
  <InboundNodeEncoding vt="8">Xml</InboundNodeEncoding>  
  <EstablishSecurityContext vt="11">-1</EstablishSecurityContext>  
  <IncludeExceptionDetailInFaults vt="11">0</IncludeExceptionDetailInFaults>  
  <MaxConcurrentCalls vt="3">16</MaxConcurrentCalls>  
  <ServiceCertificate vt="8" />  
  <MessageEncoding vt="8">Text</MessageEncoding>  
  <OutboundBodyLocation vt="8">UseBodyElement</OutboundBodyLocation>  
</CustomProps>  

以下代码段说明如何创建 WCF-WSHttp 接收位置:

// Use BizTalk Explorer object model to create new WCF-WSHttp receive location   
string server = System.Environment.MachineName;  
string database = "BizTalkMgmtDb";  
string connectionString = string.Format("Server={0};Database={1};Integrated Security=true", server, database);  
string transportConfigData = @"<CustomProps>  
  <InboundBodyLocation vt=""8"">UseBodyElement</InboundBodyLocation>  
  <UseSSO vt=""11"">0</UseSSO>  
  <Identity vt=""8"">  
    <identity>  
    <userPrincipalName value=""username@contoso.com"" />  
    </identity>  
  </Identity>  
</CustomProps>";  
//requires project reference to \Program Files\Microsoft BizTalk Server 2009\Developer Tools\Microsoft.BizTalk.ExplorerOM.dll  
BtsCatalogExplorer explorer = new Microsoft.BizTalk.ExplorerOM.BtsCatalogExplorer();  
explorer.ConnectionString = connectionString;  
// Add a new BizTalk application  
Application application = explorer.AddNewApplication();  
application.Name = "SampleBizTalkApplication1001";  
// Save  
explorer.SaveChanges();  

// Add a new one-way receive port  
IReceivePort receivePort = application.AddNewReceivePort(false);  
receivePort.Name = "SampleReceivePort";  
// Add a new one-way receive location  
IReceiveLocation receiveLocation = receivePort.AddNewReceiveLocation();  
receiveLocation.Name = "SampleReceiveLocation";  
// Find a receive handler for WCF-WSHttp   
int i = 0;  
for(i=0; i < explorer.ReceiveHandlers.Count; ++i)   
{  
    if("WCF-WSHttp" == explorer.ReceiveHandlers[i].TransportType.Name)  
        break;  
}  
receiveLocation.ReceiveHandler = explorer.ReceiveHandlers[i];  
receiveLocation.Address = "/samplepath/sampleservice.svc";  
receiveLocation.ReceivePipeline = explorer.Pipelines["Microsoft.BizTalk.DefaultPipelines.PassThruReceive"];  
receiveLocation.TransportType = explorer.ProtocolTypes["WCF-WSHttp"];  
receiveLocation.TransportTypeData = transportConfigData;  
// Save  
explorer.SaveChanges();   

另请参阅

通过独立 WCF 接收适配器发布 WCF 服务
为独立的 WCF 接收适配器配置 IIS
管理 BizTalk 主机和主机实例
如何更改服务帐户和密码
安装用于 WCF 适配器的证书
指定 WCF 适配器的消息正文
配置 WCF-WSHttp 适配器