規劃使用 Web 服務
規劃 Web 服務可以分成兩種類別:規劃發佈 Web 服務,以及規劃取用 Web 服務。 本主題描述取用 Web 服務的考慮。 如需發佈 Web 服務的相關資訊,請參閱 規劃發佈 Web Services1。
當您建立方案時,請記住下列事項:
在參數名稱中使用兩個底線字元
Web 方法的參數名稱不可以 "__" (兩個底線字元) 作為開頭。 以兩個底線字元作為開頭的名稱可能會建立無法為 XLANG/s 所支援 (亦即無法使用) 的 Web 訊息部分。
Web 方法不支援 Any 元素和 anyAttribute 屬性
您無法在 Web 方法的架構中使用 任何 專案或任何 Attribute 屬性。
使用 XLANG/s 關鍵字
Web 服務名稱或 Web 方法名稱不能是 XLANG/s 中的關鍵字。 如果在 Web 服務名稱或是 Web 方法名稱中使用 XLANG/s 關鍵字,當您新增 Web 服務時就會出現編譯錯誤。 如需 XLANG/s 語言的保留字清單,請參閱 XLANG/s 保留字 (https://go.microsoft.com/fwlink/?LinkId=155765) 。
參數類型的必要 XLANG/秒支援
使用非 XLANG/s 支援的 Web 方法參數類型會導致編譯錯誤。 例如,BizTalk Server 不支援包含結構描述類型之單一維度陣列的參數。 此外,BizTalk Server不支援多維度陣列。 如需 XLANG/s 語言在 BizTalk Server 中保留的單字清單,請參閱XLANG/s 保留字組 (https://go.microsoft.com/fwlink/?LinkId=155765) 。
避免新增包含 C# 關鍵字或識別碼的 Web 參考所造成的編譯錯誤
當您使用[新增 Web 參考] 將 Web 參考新增至 BizTalk 專案時,BizTalk Server會將每個 Web 方法呼叫架構所需的架構類型轉換成架構。 BizTalk Server 會將這些結構描述加入到 Reference.xsd 中。 如果您的結構描述包含 C# 關鍵字的項目名稱,或者項目名稱不是有效的 C# 識別項,便可能會產生執行階段錯誤。 為了避免執行階段錯誤,請確定您使用的 Web 服務不包含 C# 關鍵字項目名稱或是無效的 C# 識別項。
不支援多個服務/埠類型定義
BizTalk Server 支援使用單一服務與連接埠類型定義來新增 Web 服務檔。 如果您使用多個服務與連接埠類型定義來新增 WSDL 檔案,可能會出現下列錯誤:
Could not generate BizTalk files. Object reference not set to an instance of an object.
支援使用 Web 服務公開的陣列
BizTalk Server可以取用 Web 服務未BizTalk Server Web 服務所公開的一維和不規則陣列。 如需如何使用 Web 服務陣列的詳細資訊,請參閱 如何取用 Web 服務陣列 (https://go.microsoft.com/fwlink/?LinkId=155766) 。
注意
不支援多維度陣列語法。 例如, MyArray[1,5]。
注意
BizTalk Server不支援取用 Web 服務所公開之DataSet物件的陣列。 XLANG/s 子服務原生支援 .NET DataSet 類別,但如果您建立 BizTalk 專案,其中包含 Web 服務的 Web 參考,該 Web 服務會公開 .NET DataSet 物件的陣列,當您嘗試編譯專案時會收到錯誤。
Web 方法參數必須是 Xml 可序列化
在使用的 Web 服務中,所有參數都必須是可序列化的 XML。 如果您新增的 Web 方法中,包含的參數為不可序列化的 Xml,就會產生下列錯誤訊息:
System.Xml.Element 必須是可序列化的 XML,才能做為訊息部分類型。
注意
不支援資料類型 XmlDocument 和 DataSet,但不支援 Xml Serializable。
取用 Messaging-Only Web 服務
取用僅限傳訊的 Web 服務時,所有BizTalk Server訊息本文元件名稱都必須符合 Web 方法參數名稱。 例如,如果 Web 服務的簽章是
WebMethod(MyType1 type1, MyType2 type2)
,元件名稱必須是 type1 和 type2,您可能會收到下列執行時間錯誤:Failed to retrieve the message part for parameter %1
如需詳細資訊,請參閱 如何在 Messaging-Only 案例中使用 Web 服務 (https://go.microsoft.com/fwlink/?LinkId=155767) 。
使用程式來設定 SOAP 傳送埠
您可以在訊息內容中,使用程式來設定組態屬性。 您可以在協調流程或自訂管線元件中設定這些屬性,不論傳送埠是靜態還是動態。
注意
若要以程式設計方式設定靜態 SOAP 傳送埠的MethodName屬性,您必須在 [BizTalk Server 管理主控台] 的 [SOAP 傳輸屬性] 對話方塊的[Web 服務] 索引標籤中,將[方法名稱] 設定為[稍後指定]。
如需 MethodName 屬性的詳細資訊,請參閱 如何動態設定已取用 Web 服務的 URI (https://go.microsoft.com/fwlink/?LinkID=155768) 。
屬性規則
如果組態屬性是設於接收管線的協調流程或自訂管線元件中,則會套用下列規則:
若訊息傳送至靜態傳送埠,屬性值會以該傳送埠設定的值覆寫。
若訊息傳送至動態傳送埠,則不會覆寫屬性值。
如果組態屬性是設於傳送管線的自訂管線元件中,則會套用下列規則:
無論訊息是傳送至靜態或動態傳送埠,都不會覆寫值。 換言之,不管組態屬性設於何處,傳送管線元件都會覆寫組態屬性。
如需自訂管線元件的詳細資訊,請參閱 開發自訂管線元件 (https://go.microsoft.com/fwlink/?LinkId=155769) 。
如需 SOAP 傳送配接器組態屬性的詳細資訊,請參閱 如何動態設定已取用 Web 服務的 URI () https://go.microsoft.com/fwlink/?LinkID=155768 。
將 Web 參考新增至包含多根架構的已取用 Web 服務,將會導致編譯錯誤
如果您為衍生自已發佈 BizTalk 協調流程且協調流程包含具有多個根目錄的架構,將 Web 服務新增至專案的 Web 參考,則編譯專案時會發生錯誤。 如果您將 Web 參考加入由已發佈之 BizTalk 協調流程衍生出來的專案,請確定協調流程不包含任何多重根目錄的結構描述。
使用 TypedDataSets 作為 Web 方法的參數
當您打算使用 TypedDataSets 作為 Web 方法的參數時,需要先進行下列事項來支援此操作:
將 Web 參考加入 C# 專案,然後產生 Proxy。
建立 SOAP 傳送埠,然後指定傳送埠上的 Proxy 並選擇方法。
在協調流程中,定義晚期繫結埠與訊息類型。 在大部分不需要屬性升級或辨別欄位存取的情況下,類型可以定義為 XMLDocument。 選取使用此類型的 PassThrough 管線。
在 [BizTalk Server管理主控台] 的 [SOAP傳輸內容] 對話方塊的 [Web 服務] 索引標籤中,指定您想要使用該所建立的 Proxy。 您同時需要指定組件、類型與方法。
將 Web 參考新增至包含預期 Generic-Based 參數之 Web 方法的已取用 Web 服務會導致編譯錯誤
如果您為 Web 服務新增 Web 參考,其中包含預期泛型參數的 Web 方法,例如可為 Null 的參數,則會在編譯專案時發生錯誤。 不支援此連結方式。 您必須使用明確特製化來呼叫 XLANG/s 的泛型類別。
使用新增 Web 參考產生 BizTalk 架構
當您使用[新增 Web 參考] 將 Web 參考新增至 BizTalk 專案時,BizTalk Server會將每個 Web 方法呼叫架構所需的架構類型轉換成架構。 BizTalk Server 會將這些結構描述加入到 Reference.xsd 中。 若要確保 新增 Web 參考 正確產生 BizTalk 架構,Web 服務必須符合下列指導方針:
Web 方法應該有 SoapDocumentMethodAttribute ,而不是 SoapRpcMethodAttribute。
Web 服務和方法必須使用常值系結,而不是編碼,例如[SoapDocumentMethod (Use=SoapBindingUse.Literal) ]。
Web 方法參數和傳回型別必須具有具有有效Namespace屬性的XmlRootAttribute,除非它們是原生 XSD 類型和 XmlNode 類型。
Web 方法不得使用SoapDocumentMethodAttribute中的RequestNamespace和ResponseNamespace屬性。
Web 服務必須符合 Web 服務互通性 (WSI) Basic Profile version 1.1。
新增 Web 參考不支援 Web 服務描述語言 (WSDL) Import 元素
當您將 Web 參考加入含有 Import 項目的 WSDL 檔案時,加入 Web 參考功能將無法運作。