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