SOAP 发送适配器
使用 SOAP 发送适配器可调用 Web Services。 SOAP 发送适配器读取 BizTalk 消息对象上的消息上下文以获取代理名,并调用关联的外部 Web Services 代理。
SOAP 发送适配器使用以下验证类型之一对目标服务器进行验证:
匿名。 默认设置。
基本。 SOAP 连接以纯文本格式发送用户名和密码。
摘要。 SOAP 连接以加密格式发送用户名和密码。
Kerberos 或 NTLM。 用户名和密码都不通过 SOAP 连接发送。 SOAP 适配器始终为此验证类型使用运行 SOAP 发送适配器的进程的凭据。
另外,如果 Web 服务器要求或接受客户端安全套接字层 (SSL) 证书,SOAP 发送适配器还可为其提供该证书。
如果) 启用了企业单 Sign-On (SSO,当 SOAP 发送适配器收到包含 SSOTicket 属性请求的消息时,适配器将连接到 SSO 服务器以验证并兑换票证。 在 SOAP 适配器验证票证后,将对其进行解密,并从凭据存储中检索关联系统的凭据。 然后,SOAP 适配器将使用这些凭据连接到关联系统,并处理 SOAP 请求。
SOAP 发送适配器可与接受或要求使用客户端证书的服务器建立安全连接。 如果指定了客户端证书,则在连接要求或接受客户端证书的服务器时,SOAP 发送适配器将使用该证书。 如果未指定客户端证书,并且目标服务器要求客户端证书,则 SOAP 发送适配器将无法发送消息,并会遵循标准的重试逻辑。
SOAP 发送适配器使用的客户端证书位于运行 BizTalk Server 进程的帐户的个人存储中。 SOAP 适配器根据证书的指纹来指定证书。 如果 SOAP 发送适配器由于某种原因无法加载证书,则会挂起该适配器正在发送的消息。
如果启用了送达通知,则在消息传输成功时,BizTalk 消息引擎将向 MessageBox 数据库发布一个关联的确认 (ACK) 消息。 同样,当 BizTalk 消息引擎挂起消息或业务流程引擎挂起业务流程时,BizTalk Server 也会向 MessageBox 发布一个关联的否定确认 (NACK) 消息。 NACK 消息包含上下文属性以及一个由 SOAP 错误构成的消息正文部分。 如果 NACK 消息是由于 HTTP 或 SOAP 适配器传输失败而生成的,则 SOAP 错误包含来自目标 Web 服务器的响应的 Headers 元素和 Body 元素。 下面列出了一个由于 SOAP 传输失败而生成的 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 消息。
若要订阅 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>