SOAP 傳送配接器
您可以使用 SOAP 傳送配接器來呼叫 Web 服務。 SOAP 傳送配接器會讀取 BizTalk 訊息物件中的訊息內容以取得 Proxy 名稱,並呼叫關聯的外部 Web 服務 Proxy。
SOAP 傳送配接器透過下列其中一種驗證類型,以目的地伺服器進行驗證:
匿名。 預設設定。
基本。 SOAP 連線會以純文字傳送使用者名稱及密碼。
摘要。 SOAP 連線以加密格式傳送使用者名稱及密碼。
Kerberos 或 NTLM。 使用者名稱或密碼都不會透過 SOAP 連線傳送。 SOAP 配接器永遠使用 SOAP 傳送配接器在其下執行此驗證類型的處理序之認證。
此外,SOAP 傳送配接器可提供用戶端安全通訊端層 (SSL) 認證給 Web 伺服器 (若伺服器要求或接受)。
如果您已啟用 Enterprise Single Sign-On (SSO) ,當 SOAP 傳送配接器收到具有 SSOTicket 屬性要求的訊息時,配接器會連線到 SSO 伺服器來驗證和兌換票證。 SOAP 配接器驗證票證後,會加密該票證,並從認證存放區擷取分支機構系統的認證。 接著 SOAP 配接器會使用認證連接到分支機構系統,然後處理 SOAP 要求。
SOAP 傳送配接器可與接收或要求用戶端認證的伺服器建立安全連線。 若指定用戶端認證,則與要求或接收用戶端認證的伺服器連線時,SOAP 傳送配接器會使用認證。 若沒有指定用戶端認證,且目的地伺服器要求用戶端認證,SOAP 傳送配接器就無法傳送訊息,且會依循標準重試邏輯。
SOAP 傳送配接器使用的用戶端認證,來自執行 BizTalk Server 程序的帳戶之「個人」存放區。 SOAP 配接器會依照指紋來指定認證。 若 SOAP 傳送配接器因為任何原因而無法載入認證,它所傳送的訊息就會擱置。
當訊息成功傳輸時,若啟用傳遞通知,BizTalk 傳訊引擎會發佈關聯的「通知」(ACK) 訊息到 MessageBox 資料庫。 同樣地,BizTalk 傳訊引擎擱置訊息或協調流程引擎擱置協調流程時,BizTalk Server 也會發佈關聯的「負值通知」(NACK) 訊息到 MessageBox。 NACK 訊息包含內容屬性,以及由 SOAP 錯誤組成的訊息內文部分。 如果因為從 HTTP 或 SOAP 配接器傳輸失敗而產生 NACK 訊息,SOAP 錯誤會包含來自目的地 Web 服務器的 標頭 元素和 回應的 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 Detail 區段存取 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>