【转】Web Reference和Service Reference的区别
今天因?yàn)轫?xiàng)目需要使用服務(wù)引用,就按之前的經(jīng)驗(yàn)添加上了,步驟如下:
項(xiàng)目根目錄——引用——右鍵——添加服務(wù)引用——高級(jí)——添加Web引用——輸入接口的URL地址——回車(下方出現(xiàn)的就是接口的定義的方法)——修改Web引用名——添加引用。
按照上面的步驟就可以將引用添加到Web References文件夾下,這也是以往經(jīng)驗(yàn),但是具體使用時(shí)發(fā)現(xiàn)添加的是Web Reference并不能滿足項(xiàng)目的需要,這里需要用的是Service Reference。在這之前也查過(guò)很多文章,大多數(shù)都說(shuō)是兩者沒(méi)有什么大的區(qū)別,主要是Service Reference適用的.net版本更高,而且可以使用WCF。那么兩者到底有什么區(qū)別呢?
一、Web Reference生成的代理可以被.net1.1或.net2.0的客戶端調(diào)用;Service Reference生成的代理只能被.net3.0+的客戶端調(diào)用。
二、Web Reference不能使用WCF(上面已經(jīng)提到,原因是WCF需要.net3.0的支持);Service Reference則可以使用WCF(當(dāng)然需要3.0+的客戶端)。
三、Web Reference是由wsdl.exe生成客戶端代理的,生成webservice代理類的方法,即從System.Web.Services.Protocols.SoapHttpClientProtocol派生而來(lái),代理類代碼可以指定要訪問(wèn)的URL屬性;Service Reference是由svcutil.exe生成客戶端代理的,按照新的webservice客戶訪問(wèn)機(jī)制WCF(不是直接從System.Web.Services.Protocols.SoapHttpClientProtocol派生而來(lái)。)代理類代碼沒(méi)有URL屬性可指定,而是在客戶端的配置文件app.config中指定endpoint來(lái)訪問(wèn)指定的url。
那么如何添加Service Reference呢,步驟與文章開(kāi)頭類似,具體如下:
項(xiàng)目根目錄——引用——右鍵——添加服務(wù)引用——輸入地址——轉(zhuǎn)到(下方會(huì)出現(xiàn)服務(wù)與操作兩個(gè)小窗口,服務(wù)是代理類名稱,操作是代理類中定義的可調(diào)用方法)——修改命名空間——確定。
與添加Web Reference不同的是沒(méi)有點(diǎn)擊“高級(jí)”按鈕,高級(jí)中添加的Web Reference是.net2.0版本的引用方式,是為了兼容性才保留下來(lái)。
msdn解釋:若要調(diào)用 Web 服務(wù)的方法,應(yīng)調(diào)用生成的 Web 服務(wù)代理類的對(duì)應(yīng)方法。 生成的代理類執(zhí)行對(duì) Web 服務(wù)方法的 Web 請(qǐng)求。
【注意】
要使啟用 AJAX 的 ASP.NET 應(yīng)用程序從腳本調(diào)用 Web 服務(wù),必須配置該應(yīng)用程序注冊(cè)所需的 ASP.NET HTTP 處理程序。
您調(diào)用的 Web 服務(wù)必須是 .asmx 文件,并且必須使用 ScriptServiceAttribute 特性限定。 從腳本調(diào)用的各個(gè)方法必須使用 WebMethodAttribute 特性限定。 不帶此特性的方法不在代理類中公開(kāi)。
以上是服務(wù)引用的步驟及相關(guān)知識(shí),下面看下如何在一個(gè)站點(diǎn)添加服務(wù)接口:
服務(wù)要建在web層,在web層或任選一個(gè)文件夾右鍵——添加——新建項(xiàng)——選擇web服務(wù)(注意文件是以 .asmx為后綴)
下面是一個(gè)小例子:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using System.Data; namespace DemoWeb.API {/// <summary>/// WSVerify 的摘要說(shuō)明/// </summary>[WebService(Namespace = "http://www.*****.com/")][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)][System.ComponentModel.ToolboxItem(false)]// 若要允許使用 ASP.NET AJAX 從腳本中調(diào)用此 Web 服務(wù),請(qǐng)取消對(duì)下行的注釋。// [System.Web.Script.Services.ScriptService]public class WSVerify : System.Web.Services.WebService{[WebMethod(EnableSession = true)]public DataTable GetLoginUserId(string username, string password){//檢查用戶是否登錄DataTable dt = new BLL.company().GetUserByUsernamePwd(username, password);return dt;}} }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
其中WebMehodAttribute封閉類無(wú)法被繼承,向使用 ASP.NET 創(chuàng)建的 XML Web services 中的某個(gè)方法添加此特性后,就可以從遠(yuǎn)程 Web 客戶端調(diào)用該方法。否則無(wú)法調(diào)用。
總結(jié)
以上是生活随笔為你收集整理的【转】Web Reference和Service Reference的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 没5G 消息称华为nova 10系列延期
- 下一篇: 【转】SVN冲突出现场景