VS。NET 我可以說不嗎?(再談Web Service)
小氣的神 2001.08.06
不久前我曾寫了一篇有關(guān)用VS。NET Beta 2 來完成一個(gè)Web Service 的整個(gè)過程。這篇文章也是有關(guān)Web Service的,不過實(shí)現(xiàn)Web Service的整個(gè)過程完全是手工方式的,可以不依賴于VS。NET這樣的開發(fā)工具。VS。NET開發(fā)Web Service是非常簡(jiǎn)便的,同樣它也封裝了許多底層的信息,它希望開發(fā)人員可以把精力集中在主要的邏輯實(shí)現(xiàn)和Service本身上。
至于對(duì)VS。NET你能否說不,那么要看你自己的理解了,好了言歸正轉(zhuǎn),開始實(shí)現(xiàn)這個(gè)Web Service吧。
首先你必須已經(jīng)成功安裝Framework SDK Beta 2 ,然后用Notepad、IIS、IE、Dos 的Command Prompt就可以完成了。整個(gè)功能還是沿用上次的例子,一個(gè)HelloWorld 和Add的例子,如果你Download了兩個(gè)Zip包,你會(huì)發(fā)現(xiàn)兩者中許多代碼是一樣的。特別是客戶端這邊,它根本不關(guān)心你是用什么生成的。
整個(gè)的過程分為以下幾步:
1. 手工生成一個(gè) .asmx文件。
2. 設(shè)置一下你的IIS服務(wù)器。
3. 在瀏覽器中測(cè)試這個(gè)Web Service
4. 生成代理包
5. 編寫客戶端代碼進(jìn)行測(cè)試。
簡(jiǎn)單的看和上次在VS。NET中沒有什么不同,唯一多的是要手工設(shè)置一下IIS,在VS。NET中是通過把這頁設(shè)成Start Page然后F5來完成對(duì)IIS的設(shè)置的。有關(guān)設(shè)置的方面,dotnet比以前的ASP或Com有許多不同,全面了引進(jìn)XML格式,這個(gè)不在這里說了。我們不要涉及這些。
具體的說:
1. 手工生成一個(gè) .asmx文件。
在VS。NET中它自動(dòng)生成一個(gè)和Project同名的. asmx文件,同樣也會(huì)再自動(dòng)生成一個(gè) .asmx.vb 或 .asmx.cs 文件,其實(shí)實(shí)現(xiàn)Service你的代碼是寫在這個(gè)文件中的,當(dāng)然你也可以直接在 .asmx文件中直接寫,這樣IIS第一次運(yùn)行時(shí)會(huì)編譯這個(gè).asmx文件,在特定的目錄下生成一個(gè)DLL文件。不過我喜歡用象VS。NET的方式來實(shí)現(xiàn),這樣更有封裝性,實(shí)際中應(yīng)用中也更安全。道理就象一開始我們直接在ASP中用ADO訪問數(shù)據(jù)庫,以后卻自然的是用一個(gè)組件來完成這些,然后在ASP中調(diào)用這個(gè)組件一樣。但如果你完全沿用VS。NET的作法,是無法編譯通過的。VS。NET中的.asmx文件是這樣的:
<%@ WebService Language="vb" Codebehind="Service1.asmx.vb" Class="WebService1.Service1" %>,然后是一個(gè).vb 的文件,但如果我們照抄它,編譯時(shí)需要-r許多庫文件。你可以這樣做,把這句話改成這樣的:<%@ WebService Language="vb" class="MyWebService.Service1, WebService1" %> MyWebService是Namespace , Service1是你實(shí)現(xiàn)Service功能的類名,WebService1是你編譯.vb成DLL的名字。然后在你的 .asmx.vb 中先加上這兩句話:
Namespace MyWebService
End Namespace
然后你會(huì)發(fā)現(xiàn)我Copy了原來在VS。NET中的所有實(shí)現(xiàn)WebService的代碼。然后可以存盤,將.asmx和 .asmx.vb放到一個(gè)目錄中,比如:MyService,然后準(zhǔn)備在Dos 的Command中編譯這個(gè)Web Service了。使用下面的編譯的編譯命令:
VBC /t:library /r:System.web.Services.dll /r:System.dll /r:System.XML.dll /out:bin/WebService1.dll Service1.asmx.vb
確認(rèn)你在MyService目錄下打入這個(gè)命令,這樣會(huì)在這個(gè)目錄下生成的子目錄Bin中發(fā)現(xiàn)這個(gè)DLL文件:WebService1.DLL 。如果這一切都沒有問題,那么你過了第一關(guān)。
2. 在IIS中設(shè)置。
這就比較簡(jiǎn)單了,點(diǎn)中MyService目錄右鍵選擇共享,然后共享這個(gè)目錄或是在管理工具中一步一步的新增一個(gè)虛擬目錄都是一樣的。但要效驗(yàn)?zāi)愕腁pplication Name:是否是叫WebService1和你的.asmx中class="MyWebService.Service1, WebService1" 這句對(duì)應(yīng)。具體的你可以看附帶的圖02SetupIIS.jpg。剛才編譯時(shí)用的 /out:bin/WebService1會(huì)在這里有用,如果我們什么也步配置,那么默認(rèn)的是去/bin目錄中看是否有這個(gè)文件,如果你忘了加這個(gè)參數(shù),那么編譯完成后最好Copy編譯的DLL去當(dāng)前目錄的bin子目錄
3. 完成IIS的設(shè)置后,可以用IE瀏覽器來測(cè)試了。
具體的你可以訪問這樣的URL:http://localhost/你共享的目錄名/你的WebService.asmx 如果正常它會(huì)檢查被編譯的類,并返回一個(gè)有關(guān)這個(gè)Web Service的HTML視圖。象附帶的圖中03IEOpenAsmx.jpg中的一樣。其實(shí)它是由一個(gè)DefaultWsdlHelpGenerator.aspx的模板文件產(chǎn)生的,這個(gè)文件在C:WINNTMicrosoft.NETFrameworkv1.0.2914CONFIG 目錄中。一千五多行代碼,也許中文版出來以后這個(gè)模板也會(huì)成中文的。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注