HTTP 接收适配器
HTTP 接收适配器的接收位置是一个通过 BizTalk Server 管理控制台配置的独特 URL。
您可为客户端的异步提交或同步提交配置 HTTP 接收适配器。 异步提交为单向提交,而同步提交为双向(或称为请求响应)提交。
您可使用 IIS 安全性对传入请求进行验证和授权。
HTTP GET 请求和 HTTP POST 请求
HTTP 接收适配器可通过两种不同的方式接收消息,即通过 HTTP POST 请求或 HTTP GET 请求。
当 HTTP 接收适配器通过 HTTP POST 请求获取信息时,将按顺序发生以下事件:
在 BizTalk Server 中配置的 URL 在该接收位置上接收一条新消息。
接收适配器创建一个 BizTalk 消息对象,以便将该消息提交到服务器。
接收适配器创建仅具有一个部分(正文部分)的 BizTalk 消息对象。
在读取该消息并将其成功提交到服务器之后,HTTP 接收适配器会将 HTTP 代码 202 发送回客户端,指示已接受该请求。
另外,HTTP 接收适配器也可以通过 HTTP 响应发送消息相关标记。 此相关标记表示 BizTalk Server 中的消息。 如果 HTTP 接收位置位于请求响应端口,则适配器将随响应消息一起返回成功代码 200。
当 HTTP 接收适配器处理来自 HTTP GET 请求的消息时,接收适配器将创建 BizTalk 消息对象,并将该 HTTP GET 请求的解码查询字符串放入 BizTalk 消息正文部分中。 HTTP 适配器使用以下算法来选择放入 BizTalk 消息正文部分中的查询字符串:
如果 HTTP 接收适配器接收到 HTTP GET 请求,该适配器会使用问号 (?) 作为分隔符,将传入 URI 字符串拆分为两部分。
URI 字符串的第一部分(问号分隔符之前的部分)将复制到消息上下文的 InboundTransportLocation 属性中。 InboundTransportLocation 属性唯一标识BizTalk Server接收消息的位置。 引擎使用此属性来确定应为该消息运行哪个接收位置。
HTTP 适配器获取问号分隔符后面的其余 URI 字符串,然后将其解码并复制到 BizTalk 消息正文部分中。
如果 HTTP 接收适配器接收到空 HTTP GET 或 HTTP POST 操作,将拒绝该操作。
HTTP 接收适配器对 GET 请求的处理
以下示例说明了 HTTP 接收适配器如何处理通过 HTTP GET 请求接收的消息。 这些示例假设 HTTP 接收适配器配置了以下两个接收位置:
/vroot/BTSHTTPReceive.dll
/vroot/BTSHTTPReceive.dll?LocationID=1
假设收到客户端的以下 HTTP GET 请求:
http://servername/vroot/BTSHTTPReceive.dll?LocationID=1
HTTP 接收适配器将执行如下操作:
将消息上下文上的 InboundTransportLocation 属性设置为等于 /vroot/BTSHTTPReceive.dll,将 BizTalk 消息对象正文部分设置为等于 LocationID=1。
假设收到客户端的以下 HTTP GET 请求:
http://servername/vroot/BTSHTTPReceive.dll?LocationID=1&MyParam=My%20Value
HTTP 接收适配器将执行如下操作:
将 InboundTransportLocation 属性设置为 /vroot/BTSHTTPReceive.dll,将 BizTalk 消息对象正文部分设置为等于 LocationID=1&MyParam=My Value。
假设收到客户端的以下 HTTP GET 请求:
http://servername/vroot/BTSHTTPReceive.dll
HTTP 接收适配器执行的操作为+ ,如下所示:
拒绝该请求,因为 HTTP GET 请求的格式不正确。
HTTP 接收适配器的批处理支持
HTTP 接收适配器将消息分批提交给服务器。 用于向服务器提交消息的批的大小可在 HTTP 适配器接收处理程序中进行配置。
HTTP 接收适配器对挂起失败请求的支持
BizTalk Server HTTP 接收适配器具有一个配置设置“挂起失败的请求”,用于控制如果 HTTP 请求由于接收管道故障、映射失败或路由故障而导致入站处理失败时会发生什么情况。 该设置有两个可能的值:
错误。 这是默认设置。 HTTP 接收适配器将放弃由于接收管道故障、映射故障或路由故障而导致入站处理失败的消息。 另外,将向客户端发送错误状态代码 401 或 500。
正确。 HTTP 接收适配器将挂起由于接收管道故障、映射故障或路由故障而导致入站处理失败的消息。 对于单向接收端口,会将 “已接受” 状态代码 202 发送到客户端。 对于双向接收端口, 会将错误 状态代码 500 发送到客户端。
HTTP 接收适配器的 Chunked 编码支持
HTTP 接收适配器可接受带有使用 Chunked 编码的正文消息的 HTTP 请求。 当正文大小超过 4 KB 时,接收适配器将使用 Chunked 编码来发送响应消息。 可以通过设置 HTTP 适配器配置和优化参数中所述的 DWORD 注册表项来关闭分块编码
HTTP 接收适配器的客户端证书
HTTP 接收位置使用具有客户端证书的安全连接时,HTTP 接收适配器会从 Microsoft Internet 信息服务 (IIS) 获取该客户端证书的指纹,然后将其添加到在该位置通过 HTTPS 接收的所有消息的消息上下文中。 HTTP 接收适配器可设置以下系统属性:
SourcePartyEvidenceQualifier = "Certificate"
SourcePartyEvidence = <certificate thumbprint>
HTTP 接收适配器返回的状态代码
下面列出了 HTTP 接收适配器返回的各种状态代码:
200 正常。 适配器已成功处理请求消息并生成响应。 适配器通过 HTTP 响应从 HTTP 请求响应端口返回此状态代码。
202 消息已接受。 适配器已将消息成功提交到服务器中,或已挂起单向请求。 适配器通过 HTTP 响应从单向 HTTP 接收端口返回此状态代码。
401 访问被拒绝。 HTTP 请求被要求验证的接收端口接收,但对该消息的安全检查失败。 例如,参与方未解析或消息未解密。
500 内部服务器错误。 处理 HTTP 请求时的常见错误。 除非双向接收端口的配置设置“挂起失败的请求”设置为 True,否则BizTalk Server不会挂起消息。