1、缺點,無法傳輸復雜對象:如無法序列化key/value結構的類型參數以及相關一維集合接口(Hashtable等打上標簽。
2、可使用wcftestclient工具測試webservice。 3、WebService可以傳遞out參數。 out 關鍵字會導致參數通過來傳遞。這與 ref 關鍵字類似,不同之處在於 ref 要求變量必須在傳遞之前進行初始化。 原本以為在rpc場景中接口存在out 關鍵字的參數根本是沒有作用的,rpc已跨進程或跨服務器,而out僅是將參數以引用的方式傳遞調用方(客戶端)進程中內存地址。經過實驗,webservice支持以引用的方式傳遞參數,推測是服務端返回數據(基礎數據為XML格式,需要返回給客戶的數據有專門的格式),再在客戶端生成的代理類進行賦值。 1、無返回值有一個參數帶out關鍵字,webservice是已返回值方式將值賦予參數。 服務端: [ WebMethod(Description = "測試out" )] public void TestOut(out string msg) { msg = @"遠程調用已經跨進程或服務器了,你還想通過我返回信息? 你做夢嗎? 我只是在同進程中以指針地址傳遞,將消息寫到該地址,以便在同進程的調用方能讀到,而你已經跨進程或服務器了,你還想找我!!!! 不過好像webservice會轉換為返回值返回" ; return; } 客戶端: public string TestOut() { return base .Channel.TestOut(); } 2、有返回值且多個參數都是帶有out關鍵字 服務端: [ WebMethod(Description = "測試out及ref" )] public string TestOutAndRef(out string msg, out string msg1, ref string msg2) { msg = @"遠程調用已經跨進程或服務器了,你還想通過我返回信息? 你做夢嗎? 我只是在同進程中以指針地址傳遞,將消息寫到該地址,以便在同進程的調用方能讀到,而你已經跨進程或服務器了,你還想找我!!!!" ; msg1 = @"webservice 好像會轉換為返回值返回。" ; msg2 = "我打醬油的" ; return "ok" ; } 客戶端: public string TestOutAndRef(out string msg, out string msg1, ref string msg2) { return base .Channel.TestOutAndRef(out msg, out msg1, ref msg2); } MSDN說明:進行 XML Web 服務調用時發生的過程與進行常規方法調用時發生的過程類似。主要的差別在於,不是調用位於客戶端應用程序中的方法,而是通過指定的傳輸(如 HTTP)生成請求消息。由於 XML Web 服務方法可能位於另一台計算機上,因此 XML Web 服務處理請求所需的信息必須通過網絡傳遞給承載 XML Web 服務的服務器。XML Web 服務處理此信息並通過網絡將結果發送回客戶端應用程序。
下圖顯示客戶端和 XML Web 服務之間的通信過程。
下面描述調用 XML Web 服務時發生的事件序列:
創建 XML Web 服務類似於創建任何提供對其應用程序邏輯的編程訪問的組件。要創建一個 XML Web 服務,您需要一些功能來構成這一要公開的服務,需要一個服務描述來定義如何使用該服務,並需要一個基礎結構來支持請求的接收和處理以及響應的發送。值得慶幸的是,已經為您提供了所需基礎結構的很大一部分。
由於 XML Web 服務可以使用 URL、HTTP 和 XML 進行訪問,這就意味著在任何平台上以任何語言運行的程序都可以訪問 XML Web 服務。由於 XML Web 服務的分散式性質,使客戶端和 XML Web 服務能夠作為自治單元運行,因此,使用 XML Web 服務的方法數不勝數。例如,對 XML Web 服務的調用可以包含在 Web 應用程序、中間件組件甚至其他 XML Web 服務中。無論 XML Web 服務客戶端采用何種形式,調用 XML Web 服務所需的全部條件就是,按照 XML Web 服務已發布的服務描述發送格式正確的請求消息。根據 XML Web 服務的性質,它可能會發送響應消息作為回應。然後,發出請求的一方必須能夠從該消息中提取必要的信息。