天天看點

在 VS 類庫項目中 Add Service References 和 Add Web References 的差別

出身問題:

1.在vs2005時代,Add Web Reference(添加Web服務引用)的功能主要是添加Web Service引用。基于.NET Framework 2.0。

2.自VS2008以後,為了對.NET Framework 3.0 或 3.5版本上WCF Service Library的支援。增加了Add Service Reference(添加服務引用)功能。但為了版本向前相容而保留了Add Web Reference(添加Web服務引用)。

生成引用檔案的差別(本段來自于網上評論,僅供參考):

用兩種方式添加同一個WebService,生成 Reference.cs的差別:

1.主要添加引用都有一個擷取服務中繼資料,反序列話本地類檔案的過程。這個結構也基本類似。都包含wsdl\discovery等檔案。

這個也和WCF Service支援Web Service的核心行業标準有關系。畢竟WCF的特性之一就是相容Web Service的特性。

2.不同的地方時Add Web Reference 生成的 Reference.cs檔案裡,包含一個服務代理類,他負責與Web服務通信,它繼承一個Soap類,使用SOAP協定,SOAP簡單對象通路協定,基于XML語言。此外還包含一些Web服務類裡定義的方法,和與之相關的異步調用方法和事件。遵守.NET Web Service 的主要規則。

3.Add Service Reference生成的用戶端檔案 Reference.cs。我看了一下,這個也會反序列化一個本地代理類,很相似和前者。不過除了服務類和其相關的一些别的類和契約接口。其中比較重要就是一個契約和一個通信管道。這個主要和WCF架構的程式設計模型和反序列話機制有關系。因為WCF 強調的是 契約的概念,還有就是綁定協定,這個就直接決定了用戶端和服務端通信的通道類型。你在這個檔案裡也能看到。此外還有服務請求和相應對應的資訊。遵循WCF服務架構的規則。

使用差別:

1.Add Web Reference:

構造執行個體 WebReference1.Service1 webs1 = new WebReference1.Service1()的構造方法不可重載。使用執行個體webs1時,可以通過webs1.Url來改變引用的位址。如:webs1.Url = "http://localhost:7280/Service1.asmx"。

2.Add Service Reference:

構造執行個體WebReference1.Service1 webs1 = new WebReference1.Service1()提供重載構造方法,預設構造方法引用的位址為<client>節點下<endpoint>中的配置位址,也可用ServiceReference1.Service1SoapClient webs2 = new ServiceReference1.Service1SoapClient("Service1Soap", "http://localhost:7280/Service1.asmx")來指定服務位址。不可以再用webs2.Url = "http://localhost:7280/Service1.asmx"來改變服務位址。

使用區表小結:

Add Service Reference隻能在構造執行個體執行個體時指定服務位址,不可動态改變。這樣可以再編譯時檢查出錯誤,以減少運作時錯誤。

繼續閱讀