HTTP 发送适配器

HTTP 发送适配器从BizTalk Server获取消息,并将其发送到 HTTP POST 请求上的目标 URL。 HTTP 发送适配器从 BizTalk 消息对象的正文部分获取消息内容。 HTTP 发送适配器忽略 BizTalk 消息对象的所有其他部分。

适配器将消息发送到目标 URL 并且 BizTalk 消息引擎收到 HTTP 成功状态代码后,HTTP 发送适配器将从 MessageBox 数据库中删除消息。

支持 HTTP 消息重定向,并且可以在发送端口上配置。

BizTalk Server将 HTTP 发送适配器作为本机 BizTalk 应用程序进行托管。 它支持单向发送消息以及请求-响应传输。 HTTP 发送适配器的发送位置是通过发送端口配置的不同 URL。 此唯一 URL 可以包括追加到基 URL 的查询字符串。

对 HTTP 发送适配器的批处理支持

HTTP 发送适配器不支持批处理操作。

HTTP 发送适配器的分块编码支持

如果启用 “启用分块编码 ”配置选项,则 HTTP 发送适配器在请求大小超过 8 KB 时使用分块编码发送请求消息。 如果使用 HTTP 代理服务器,则 HTTP 发送适配器不使用分块编码,并且始终在发送之前暂存数据。 默认情况下启用 “启用分块编码 ”配置选项。

当发送适配器收到响应消息时,它可以接受包含分块编码正文部分的响应消息。

HTTP 发送适配器的客户端身份验证

HTTP 发送适配器使用以下身份验证类型之一对目标服务器进行身份验证:

  • 匿名。 连接到目标服务器时,HTTP 适配器不会发送任何凭据。 如果目标服务器允许匿名身份验证,则使用目标服务器上配置的匿名帐户的凭据。

  • 基本。 HTTP 适配器通过 HTTP 连接以纯文本形式发送用户名和密码。

  • 摘要。 HTTP 适配器通过 HTTP 连接以加密格式发送密码。

  • Kerberos。 用户名和密码都不会通过 HTTP 连接发送。 HTTP 适配器使用此身份验证类型运行 HTTP 发送适配器时所使用的进程的凭据。

    此外,如果服务器需要或接受,HTTP 发送适配器还可以向 Web 服务器提供客户端安全套接字层 (SSL) 证书。

HTTP 发送适配器的客户端证书

HTTP 发送适配器可以与接受或需要客户端证书的服务器建立安全连接。 如果指定了客户端证书,则 HTTP 发送适配器在与需要或接受客户端证书的服务器连接时使用该证书。 如果未指定客户端证书,并且目标服务器需要客户端证书,则 HTTP 发送适配器将无法发送消息并遵循标准重试逻辑。

HTTP 发送适配器使用运行BizTalk Server进程的帐户的个人存储中的客户端证书。 证书由其指纹指定。 如果 HTTP 发送适配器由于任何原因无法加载证书,则会挂起它发送的消息。

HTTP 适配器的单 Sign-On 支持

可以使用 BizTalk 管理控制台配置企业单一 Sign-On (SSO) 以用于 HTTP 接收位置或发送端口。 本主题介绍 SSO 如何与 HTTP 适配器配合使用。

HTTP 接收位置的单 Sign-On 支持

当Microsoft Internet Information Services (IIS) 从 Web 客户端收到 HTTP 请求时,IIS 会对用户进行身份验证。 Internet 服务器应用程序编程接口 (ISAPI) 扩展模拟 Microsoft Windows 用户,然后调用 SSO 凭据存储以获取加密票证。 此票证作为 SSOTicket 属性存储在消息的上下文中。

在直通方案中,BizTalk 消息引擎将把消息引入 MessageBox 数据库中。 当适配器从 MessageBox 数据库接收消息时,HTTP 适配器使用加密票证和应用程序名称调用 ISSOTicket.RedeemTicket 方法 ,以从 SSO 存储中检索后端凭据。 然后,HTTP 适配器使用外部凭据连接到后端系统并处理请求。 有关关联应用程序的详细信息,请参阅 SSO 关联应用程序

在业务流程调用适配器的情况下,BizTalk 消息引擎将此消息发送到 MessageBox 数据库。 业务流程应确保保留包含票证的消息的 SSOTicket 上下文属性和 Microsoft.BizTalk.XLANGs.BTXEngine.OriginatorSID 上下文属性。 当适配器从 MessageBox 数据库收到此消息时,适配器使用加密票证调用 RedeemTicket ,以从 SSO 存储中检索后端凭据。 设计计划的用户应专门将此属性复制到消息。

HTTP 发送适配器的单 Sign-On 支持

如果启用了 SSO,当 HTTP 发送端口收到具有 Secure 属性的消息时,它会调用 SSO 服务器来验证并兑换关联应用程序的票证。 关联应用程序的管理应用程序、关联管理员或 SSO 管理员可调用 SSO 以兑换票证。 然后,SSO 将对票证进行解密,并获取后端凭据。 直通和业务流程方案与 HTTP 发送端口相同。

默认情况下,HTTP 发送端口的 SSO 处于禁用状态。 有关为 HTTP 发送端口启用 SSO 的详细信息,请参阅 配置 HTTP 发送端口

注意

只能对基本身份验证和摘要式身份验证使用单 Sign-On。

若要正确实现单一登录对 HTTP 接收和发送适配器的支持,必须满足以下条件:

  • 必须在以下位置指定相同的用户帐户:

    • 应用程序池标识 (IIS 7.0) 或承载由 HTTP 接收适配器监视的 IIS 虚拟目录的 COM+ 应用程序标识。 有关为 HTTP 接收位置配置 IIS 的详细信息,请参阅 如何为 HTTP 接收位置配置 IIS

    • 用于运行 HTTP 适配器的独立主机实例的登录凭据。 有关如何为主机实例配置登录凭据的信息,请参阅 如何修改主机实例属性

  • HTTP 适配器将使用的独立主机必须配置为“受信任验证”。 有关如何将主机配置为“受信任的身份验证”的信息,请参阅 如何修改主机属性

针对 HTTP 或 SOAP 适配器的失败传输生成的 NACK) 消息的否定确认 (

成功传输消息后,如果启用了传递通知,BizTalk 消息引擎会将关联的确认 (ACK) 消息发布到 MessageBox。 同样,当 BizTalk 消息引擎挂起消息或业务流程引擎挂起业务流程时,BizTalk Server向 MessageBox 发布关联的否定确认 (NACK) 消息。 NACK 消息包含上下文属性和由 SOAP 错误组成的消息正文部分。 如果由于 HTTP 或 SOAP 适配器的传输失败而生成 NACK 消息,则 SOAP 错误包含来自目标 Web 服务器的响应的 Headers 元素和 Body 元素。 下面是为失败的 HTTP 传输生成的 NACK 中的 SOAP 错误示例:

<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" SOAP:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">  
   <SOAP:Body>  
      <SOAP:Fault>  
         <faultcode>Microsoft BizTalk Server Negative Acknowledgment</faultcode>   
         <faultstring>An error occurred while processing the message, refer to the details section for more information</faultstring>   
         <faultactor>http://localhost/receivestandard.asp</faultactor>   
         <detail>  
            <ns0:NACK Type="NACK" xmlns:ns0="http://schema.microsoft.com/BizTalk/2003/NACKMessage.xsd">  
            <NAckID>{4E646707-03AA-4493-95C7-A64B09E2987D}</NAckID>  
            <ErrorCode>0x80131600</ErrorCode>  
            <ErrorCategory>0</ErrorCategory>  
            <ErrorDescription>The remote server returned an error: (404) Not Found.</ErrorDescription>  
            <ErrorDetail>  
            <HttpErrorDetail xmlns="http://schema.microsoft.com/BizTalk/2006/HttpErrorDetails.xsd">  
               <Headers>Server: Microsoft-IIS/5.1 Date: Wed, 21 Apr 2005 00:27:47 GMT X-Powered-By: ASP.NET Connection: close Content-Type: text/html Content-Length: 67 </Headers>  
               <Body>We could not locate the page you requested. Please check the URL.</Body>  
            </HttpErrorDetail>  
            </ErrorDetail>  
            </ns0:NACK>  
         </detail>  
      </SOAP:Fault>  
   </SOAP:Body>  
</SOAP:Envelope>  

注意

Headers 元素和 Body 元素限制在 48 KB 之内。 Headers 元素将舍入为不超出该限制的最接近完整形式的标头值对。 Body 元素将被截至 48 KB。

注意

如果没有匹配的订阅,则会放弃 NACK 和 ACK 消息。 NACK 和 ACK 消息不会由 BizTalk 消息引擎挂起。

若要订阅 NACK 消息,可执行以下操作之一:

  • 创建带有相应消息上下文属性筛选器的发送端口。 有关系统 消息上下文属性 的列表,包括与消息确认相关的属性,请参阅 UI 指南和开发人员 API 命名空间参考 中的消息上下文属性。

  • 从标记为 传递通知 = 已传输的业务流程端口发送。 如果业务流程端口标记为 “传递通知 = 已传输”,则业务流程将等待,直到收到已传输消息的 ACK 或 NACK。 如果生成了 NACK,则会将其路由到业务流程,然后业务流程将引发 DeliveryFailureException。 DeliveryFailureException 是从 NACK 消息正文中包含的 SOAP 错误反序列化而来的。 若要从返回到业务流程的 SOAP 错误中检索异常消息字符串,请将 DeliveryFailureException 转换为 SoapException,然后访问“SOAP 详细信息”部分中的 InnerXml。 下面的代码示例演示了如何执行此操作:

    // Cast the DeliveryFailureException to a SoapException…  
    System.Web.Services.Protocols.SoapException se = (System.Web.Services.Protocols.SoapException)e.InnerException;  
    System.Diagnostics.Trace.WriteLine(se.Detail.InnerXml);  
    //e is an Microsoft.XLANGs.BaseTypes.DeliveryFailureException  
    //object type created in an Exception handler  
    
    

    上面的代码示例返回的 XML 片断类似于以下形式:

    <ns0:NACK Type="NACK" xmlns:ns0="http://schema.microsoft.com/BizTalk/2003/NACKMessage.xsd">  
    <NAckID>{4E646707-03AA-4493-95C7-A64B09E2987D}</NAckID>  
    <ErrorCode>0x80131600</ErrorCode>  
    <ErrorCategory>0</ErrorCategory>  
    <ErrorDescription>The remote server returned an error: (404) Not Found.</ErrorDescription>  
    <ErrorDetail>  
    <HttpErrorDetail xmlns="http://schema.microsoft.com/BizTalk/2006/HttpErrorDetails.xsd">  
       <Headers>Server: Microsoft-IIS/5.1 Date: Wed, 21 Apr 2005 00:27:47 GMT X-Powered-By: ASP.NET Connection: close Content-Type: text/html Content-Length: 67 </Headers>  
       <Body>We could not locate the page you requested. Please check the URL.</Body>  
    </HttpErrorDetail>  
    </ErrorDetail>  
    </ns0:NACK>  
    

另请参阅

HTTP 适配器
UI 指南和开发人员 API 命名空间参考中的 SSO COM 对象