共用方式為


使用 Web 服務的考量

本節提供您使用 Web 服務時應該納入考量的相關資訊。

在參數名稱中使用兩個底線字元

Web 方法的參數名稱不可以 "__" (兩個底線字元) 作為開頭。 以兩個底線字元作為開頭的名稱可能會建立無法為 XLANG/s 所支援 (亦即無法使用) 的 Web 訊息部分。

Web 方法不支援 any 項目與 anyAttribute 屬性

您無法在 Web 方法的架構中使用 任何 專案或任何 Attribute 屬性。

使用 XLANG/s 關鍵字

Web 服務名稱或 Web 方法名稱不能是 XLANG/s 中的關鍵字。 如果在 Web 服務名稱或是 Web 方法名稱中使用 XLANG/s 關鍵字,當您新增 Web 服務時就會出現編譯錯誤。 如需 XLANG/s 語言的保留字清單,請參閱 XLANG-s 保留字

參數類型必要的 XLANG/s 支援

使用非 XLANG/s 支援的 Web 方法參數類型將會造成編譯錯誤。 例如,BizTalk Server 不支援包含結構描述類型之單一維度陣列的參數。 此外,BizTalk Server 不支援多維度陣列。 如需 XLANG/s 語言在 BizTalk Server 中保留的單字清單,請參閱XLANG-s 保留字組。

避免因為加入包含 C# 關鍵字或識別項的 Web 參考而造成的編譯錯誤

當您使用[新增服務參考] 將服務參考新增至 BizTalk 專案時,BizTalk Server會將呼叫每個 Web 方法的架構類型轉換為架構所需的架構類型。 BizTalk Server 會將這些結構描述加入到 Reference.xsd 中。 如果您的結構描述包含 C# 關鍵字的項目名稱,或者項目名稱不是有效的 C# 識別項,便可能會產生執行階段錯誤。 為了避免執行階段錯誤,請確定您使用的 Web 服務不包含 C# 關鍵字項目名稱或是無效的 C# 識別項。

不支援多個服務/連接埠類型定義

BizTalk Server 支援使用單一服務與連接埠類型定義來新增 Web 服務檔。 如果您使用多個服務與連接埠類型定義來新增 WSDL 檔案,可能會出現下列錯誤:

無法產生 BizTalk 檔案。 物件參考未設定成物件的執行個體。

支援使用 Web 服務所公開的陣列

BizTalk Server 可以使用由 Web 服務所公開,但不屬於 BizTalk Web 服務的一維與不規則陣列。 如需如何取用 Web 服務陣列的詳細資訊,請參閱 如何取用 Web 服務陣列

注意

不支援多維度陣列語法。 例如: MyArray[1,5]

注意

BizTalk Server不支援取用 Web 服務所公開之DataSet物件的陣列。 XLANG/s 子服務原本即支援 .NET DataSet 類別,但是如果您建立了 BizTalk 專案,其中包含了將 .NET DataSet 物件陣列公開的 Web 服務之 Web 參考,則當您嘗試編譯專案時,會產生錯誤。

Web 方法參數必須為可序列化的 Xml

在使用的 Web 服務中,所有參數都必須是可序列化的 XML。 如果您新增的 Web 方法中,包含的參數為不可序列化的 Xml,就會產生下列錯誤訊息:

System.Xml.Element 必須是可序列化的 XML,才能做為訊息部分類型。

注意

不支援資料類型 XmlDocumentDataSet,但不支援 Xml Serializable。

使用僅供傳訊的 Web 服務

使用僅供傳訊的 Web 服務時,所有的 BizTalk 訊息內文部分名稱都必須符合 Web 方法參數名稱。 例如,如果 Web 服務的簽章是 WebMethod(MyType1 type1, MyType2 type2) ,元件名稱必須是 type1 和 type2,您可能會收到下列執行時間錯誤:

無法擷取參數 %1 的訊息部分

如需詳細資訊,請參閱 如何在僅限傳訊案例中使用 Web 服務

使用程式來設定 SOAP 傳送埠

您可以在訊息內容中,使用程式來設定組態屬性。 不管傳送埠是靜態還是動態,您都可以在協調流程或自訂的管線元件中設定這些屬性。

注意

若要以程式設計方式設定靜態 SOAP 傳送埠的MethodName屬性,您必須在 [BizTalk Server 管理主控台] 的 [SOAP 傳輸屬性] 對話方塊的[Web 服務] 索引標籤中,將[方法名稱] 設定為[稍後指定]。

如需 MethodName 屬性的詳細資訊,請參閱 如何動態設定已取用 Web 服務的 URI

如需SOAP 傳輸屬性對話方塊的詳細資訊,請參閱UI 指引和開發人員 API 命名空間參考中的SOAP 傳輸屬性對話方塊、Web 服務索引標籤。

屬性規則

如果組態屬性是設於接收管線的協調流程或自訂管線元件中,則會套用下列規則:

  • 若訊息傳送至靜態傳送埠,屬性值會以該傳送埠設定的值覆寫。

  • 若訊息傳送至動態傳送埠,則不會覆寫屬性值。

    如果組態屬性是設於傳送管線的自訂管線元件中,則會套用下列規則:

  • 無論訊息是傳送至靜態或動態傳送埠,都不會覆寫值。 換言之,不管組態屬性設於何處,傳送管線元件都會覆寫組態屬性。

  • 如需自訂管線元件的詳細資訊,請參閱 開發自訂管線元件

  • 如需 SOAP 傳送配接器組態屬性的詳細資訊,請參閱 如何動態設定已取用 Web 服務的 URI

將 Web 參考加入包含多重根目錄結構描述的已使用 Web 服務時,將會產生編譯錯誤

如果您針對由已發佈之 BizTalk 協調流程衍生出來的 Web 服務,將 Web 參考加入專案,且協調流程包括含有多重根目錄的結構描述,當您編譯專案時會產生錯誤。 如果您將 Web 參考加入由已發佈之 BizTalk 協調流程衍生出來的專案,請確定協調流程不包含任何多重根目錄的結構描述。

使用 TypedDataSets 作為 Web 方法的參數

當您打算使用 TypedDataSets 作為 Web 方法的參數時,需要先進行下列事項來支援此操作:

  1. 將 Web 參考加入 C# 專案,然後產生 Proxy。

  2. 建立 SOAP 傳送埠,然後指定傳送埠上的 Proxy 並選擇方法。

  3. 在協調流程中,定義晚期繫結埠與訊息類型。 在大部分不需要屬性升級或辨別欄位存取的情況下,類型可以定義為 XMLDocument。 選取使用此類型的 PassThrough 管線。

  4. 在 BizTalk Server 管理主控台中,于 SOAP 傳送埠的 [SOAP 傳輸內容] 對話方塊的[Web 服務] 索引標籤中,指定您想要使用該所建立的 Proxy。 您同時需要指定組件、類型與方法。 如需詳細資訊,請參閱UI 指引和開發人員 API 命名空間參考中的SOAP 傳輸屬性對話方塊、Web 服務索引標籤。

將 Web 參考加入包含需要泛型參數之 Web 方法的已使用 Web 服務時,將會產生編譯錯誤

如果您將 Web 參考加入包含需要泛型參數 (例如空值參數) 之 Web 方法的 Web 服務專案,編譯專案時會產生錯誤。 不支援此連結方式。 您必須使用明確特製化來呼叫 XLANG/s 的泛型類別。

使用加入服務參考來產生 BizTalk 結構描述

當您使用[新增服務參考] 將服務參考新增至 BizTalk 專案時,BizTalk Server會將呼叫每個 Web 方法的架構類型轉換為架構所需的架構類型。 BizTalk Server 會將這些結構描述加入到 Reference.xsd 中。 若要確保 新增服務參考 正確產生 BizTalk 架構,Web 服務必須符合下列指導方針:

  • Web 方法應該有 SoapDocumentMethodAttribute ,而不是 SoapRpcMethodAttribute

  • Web 服務和方法必須使用常值系結,而不是編碼,例如[SoapDocumentMethod (Use=SoapBindingUse.Literal) ]。

  • Web 方法參數和傳回型別必須具有具有有效Namespace屬性的XmlRootAttribute,除非它們是原生 XSD 類型和 XmlNode 類型。

  • Web 方法不得使用SoapDocumentMethodAttribute中的RequestNamespaceResponseNamespace屬性。

  • Web 服務必須符合 Web 服務互通性 (WSI) Basic Profile version 1.1。

XSD 不會包含代表簡單參數類型的節點

當您新增 Web 參考且 Web 方法具有簡單類型的參數時,所產生的 XSD 將不會包含代表該參數的節點。 但是,所產生的 Multipart 訊息將會包含一個屬於該簡單類型的部分。 協調流程應該要適當處理此訊息部分。 如果該部分是 Web 服務要求的一部分,請使用訊息指派圖形,手動指派值給該部分。 如果該部分是 Web 服務回應的一部分,請在運算式圖形中手動存取該部分以查看值。

「加入服務參考」功能不支援 Web 服務描述語言 (WSDL) Import 項目

當您將服務參考加入含有 Import 項目的 WSDL 檔案時,加入服務參考功能將無法運作。

另請參閱

建構 Web 訊息