當(dāng)前位置:工程項(xiàng)目OA系統(tǒng) > 泛普各地 > 重慶OA系統(tǒng) > 重慶OA行業(yè)資訊
再談Web Service--VS.NET,我可以說(shuō)不嗎
申請(qǐng)免費(fèi)試用、咨詢電話:400-8352-114
AMTeam.org再談Web Service--VS.NET,我可以說(shuō)不嗎
不久前我曾寫(xiě)了一篇有關(guān)用VS。NET Beta 2 來(lái)完成一個(gè)Web Service 的整個(gè)過(guò)程。這篇文章也是有關(guān)Web Service的,不過(guò)實(shí)現(xiàn)Web Service的整個(gè)過(guò)程完全是手工方式的,可以不依賴于VS。NET這樣的開(kāi)發(fā)工具。VS。NET開(kāi)發(fā)Web Service是非常簡(jiǎn)便的,同樣它也封裝了許多底層的信息,它希望開(kāi)發(fā)人員可以把精力集中在主要的邏輯實(shí)現(xiàn)和Service本身上。
至于對(duì)VS。NET你能否說(shuō)不,那么要看你自己的理解了,好了言歸正轉(zhuǎn),開(kāi)始實(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è)的過(guò)程分為以下幾步:
1. 手工生成一個(gè) .asmx文件。
2. 設(shè)置一下你的IIS服務(wù)器。
3. 在瀏覽器中測(cè)試這個(gè)Web Service
4. 生成代理包
5. 編寫(xiě)客戶端代碼進(jìn)行測(cè)試。
簡(jiǎn)單的看和上次在VS。NET中沒(méi)有什么不同,唯一多的是要手工設(shè)置一下IIS,在VS。NET中是通過(guò)把這頁(yè)設(shè)成Start Page然后F5來(lái)完成對(duì)IIS的設(shè)置的。有關(guān)設(shè)置的方面,dotnet比以前的ASP或Com有許多不同,全面了引進(jìn)XML格式,這個(gè)不在這里說(shuō)了。我們不要涉及這些。
具體的說(shuō):
1. 手工生成一個(gè) .asmx文件。
在VS。NET中它自動(dòng)生成一個(gè)和Project同名的. asmx文件,同樣也會(huì)再自動(dòng)生成一個(gè) .asmx.vb 或 .asmx.cs 文件,其實(shí)實(shí)現(xiàn)Service你的代碼是寫(xiě)在這個(gè)文件中的,當(dāng)然你也可以直接在 .asmx文件中直接寫(xiě),這樣IIS第一次運(yùn)行時(shí)會(huì)編譯這個(gè).asmx文件,在特定的目錄下生成一個(gè)DLL文件。不過(guò)我喜歡用象VS。NET的方式來(lái)實(shí)現(xiàn),這樣更有封裝性,實(shí)際中應(yīng)用中也更安全。道理就象一開(kāi)始我們直接在ASP中用ADO訪問(wèn)數(shù)據(jù)庫(kù),以后卻自然的是用一個(gè)組件來(lái)完成這些,然后在ASP中調(diào)用這個(gè)組件一樣。但如果你完全沿用VS。NET的作法,是無(wú)法編譯通過(guò)的。VS。NET中的.asmx文件是這樣的:
<%@ WebService Language="vb" Codebehind="Service1.asmx.vb" Class="WebService1.Service1" %>,然后是一個(gè).vb 的文件,但如果我們照抄它,編譯時(shí)需要-r許多庫(kù)文件。你可以這樣做,把這句話改成這樣的:<%@ 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了原來(lái)在VS。NET中的所有實(shí)現(xiàn)WebService的代碼。然后可以存盤(pán),將.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 。如果這一切都沒(méi)有問(wèn)題,那么你過(guò)了第一關(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瀏覽器來(lái)測(cè)試了。
具體的你可以訪問(wèn)這樣的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 目錄中。一千五多行代碼,也許中文版出來(lái)以后這個(gè)模板也會(huì)成中文的。
4. 完成對(duì)Web Service的測(cè)試之后,我們開(kāi)始完成客戶端的工作,生成代理包,調(diào)用這個(gè)服務(wù)。
這部分也輕車熟路了,上篇文檔中的我也是手工完成的。具體分為兩步:
1. 先生成一個(gè)代理類。
wsdl /out:WebServiceProxyClass.cs http://localhost/WebService1/Service1.asmx
2. 然后編譯這個(gè)代理類。
csc /t:library /out:bin/MyWebServiceProxy.dll WebServiceProxyClass.cs
對(duì)于bin的目錄不是必須或要求的可以在任何目錄,完成這部之后,組件也自動(dòng)的注冊(cè)了,也就是說(shuō)你可以開(kāi)始調(diào)用這個(gè)Web Service了。
5. 用客戶端代碼進(jìn)行測(cè)試。
上一篇中我只用VS。NET簡(jiǎn)單的建立了一個(gè) ASP Form,上面放兩個(gè) Lable顯示一下。其實(shí)對(duì)于客戶端來(lái)說(shuō)可以說(shuō)多種多樣的,可以是ASP,Html,dotnet的應(yīng)用程序,ASP+頁(yè)面,VB程序、甚至是Java或其它任何語(yǔ)言生成的客戶端。這也真正表現(xiàn)了Web Service的意義,只要在Web上,你能找到這個(gè)Service,那么你就可以享受這個(gè)Service。
Html就很容易了比如:
<a href="http://localhost/WebService1/Service1.asmx/HelloWorld"> HelloWorld </a>你就可以完成測(cè)試。如果你要突出編程方式那么你可以象我上次一樣用 Service1 ServiceProxy = new Service1() ;
String strReturn = ServiceProxy.HelloWorld() ; 這樣的方式來(lái)獲得結(jié)果。在ClientHtml.html中我展現(xiàn)了兩種用于Web Service的協(xié)議:HTTP-GET和HTTP-POST。不過(guò)我想著重說(shuō)的是CallServiceXML.asp這個(gè)文件的作法,從中你可以發(fā)現(xiàn)許多不同的東西,到底Web Service是通過(guò)什么來(lái)返回它提供的Service,它在干什么,結(jié)果也許你會(huì)發(fā)現(xiàn)很耳熟的SOAP。其實(shí)代理類是通過(guò)SOAP協(xié)議和ASP+的Web Service進(jìn)行通訊。
你可以仔細(xì)考察下面的代碼:
function btn_click (n1, n2)
{
var xmlObj = new ActiveXObject("Msxml2.DOMDocument") ;
var sXml = "<?xml version="1.0" ?>" ;
sXml += "<soap:Envelope "
sXml += "xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" " ;
sXml += "xmlns:xsd="http://www.w3.org/2001/XMLSchema" " ;
sXml += "xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">" ;
sXml += "<soap:Body>" ;
sXml += "<Add xmlns="http://tempuri.org/">" ;
sXml = sXml + "<n1>" + n1.value + "</n1>" ;
sXml = sXml + "<n2>" + n2.value + "</n2>" ;
sXml += "</Add></soap:Body></soap:Envelope>"
xmlObj.loadXML(sXml) ;
// 完成請(qǐng)求的準(zhǔn)備,手工生成一個(gè)SOAP的格式包(消息主體)
XmlRequest.innerText = xmlObj.xml ;
// 發(fā)出請(qǐng)求 并且得到服務(wù)器的回應(yīng)。
var xmlHTTP = new ActiveXObject("Msxml2.XMLHTTP") ;
xmlHTTP.Open ( "Post", "http://localhost/WebService1/Service1.asmx", false) ;
xmlHTTP.setRequestHeader("SOAPAction", "http://tempuri.org/Add") ;
xmlHTTP.setRequestHeader("Content-Type", "text/xml; charset=utf-8" ) ;
xmlHTTP.Send(xmlObj.xml) ;
MyResult.innerText = xmlHTTP.responseText ;
var xmlResponse = xmlHTTP.responseXML ;
// xmlHTTP.responseXML 中就是服務(wù)器回應(yīng)的結(jié)果
answer.innerText = xmlResponse.selectSingleNode
("soap:Envelope/soap:Body/AddResponse/AddResult").text ;
看得出先構(gòu)造一個(gè)SOAP的包然后把請(qǐng)求拿回來(lái)(selectSingleNode函數(shù)是XML DOM中的很通用的一個(gè)函數(shù))具體的結(jié)果可以看09CallServiceXML.jpg
好了,通過(guò)上面我們完成了一個(gè)Web Service。這是完成一個(gè)Web
Service的基本框架,剩下的你可以進(jìn)行擴(kuò)充實(shí)現(xiàn)你需要的功能。在最后我們具體考察了Web
Service的協(xié)議和客戶端的問(wèn)題,涉及到SOAP和XML的一些概念。盡管VS。NET實(shí)現(xiàn)Web
Service很方便,但手工實(shí)現(xiàn)也是完全可以的,但愿看完這篇文章之后你可以對(duì)VS。NET說(shuō)一次不。
- 1將IT服務(wù)管理最佳實(shí)踐轉(zhuǎn)化為企業(yè)自身能力
- 2訣竅:永遠(yuǎn)不做軟件選型的看門(mén)人
- 3十大ERP“丑聞” 你有多少不知道?
- 4中國(guó)IT治理和風(fēng)險(xiǎn)管理的現(xiàn)狀、挑戰(zhàn)和對(duì)策
- 5財(cái)務(wù)管理:一個(gè)CFO的“御冬術(shù)”
- 6政務(wù):一次有關(guān)信息公開(kāi)的“行為藝術(shù)”
- 7好用的開(kāi)源ERP產(chǎn)品應(yīng)如何選擇?
- 8業(yè)務(wù)流程管理連載(一):流程的本質(zhì)
- 9為什么說(shuō)Web服務(wù)將是一件大事
- 10CIO必讀:要計(jì)算長(zhǎng)期存儲(chǔ)的成本
- 11軟件應(yīng)用:無(wú)需上門(mén)遠(yuǎn)程服務(wù)更高效
- 12流程審批OA辦公系統(tǒng)解決財(cái)務(wù)報(bào)銷等問(wèn)題
- 13今年:經(jīng)濟(jì)下行中軟件商寄望SaaS的突圍
- 14互聯(lián)網(wǎng)商業(yè)模式改變 企業(yè)家逃不掉危機(jī)
- 15通用項(xiàng)目管理度量 IT項(xiàng)目失敗主要原因
- 16重慶OA網(wǎng)絡(luò)協(xié)同辦公系統(tǒng)采用領(lǐng)先的B/S(瀏覽器/服務(wù)器) 體系架構(gòu)
- 17發(fā)改委:鼓勵(lì)民間資本進(jìn)入電信領(lǐng)域
- 18評(píng):引進(jìn)IT服務(wù)平臺(tái)的前后變化
- 19ETC 為高速公路加速
- 20網(wǎng)絡(luò)服務(wù)來(lái)日方長(zhǎng)
- 21IT知識(shí)產(chǎn)權(quán)瓶頸有待突破
- 22合規(guī)性是ITSM考核的根本指標(biāo)
- 23連鎖藥店現(xiàn)狀和信息化建設(shè)思路
- 24項(xiàng)目管理實(shí)踐指導(dǎo):如何啟動(dòng)項(xiàng)目
- 25企業(yè)理念:老鼠與米缸故事的啟發(fā)
- 26國(guó)殤后全民當(dāng)反思地震預(yù)測(cè)體系如何完善
- 27規(guī)劃ERP系統(tǒng)時(shí)勿拖后人力資源模塊
- 28目標(biāo)管理應(yīng)用不當(dāng) ERP實(shí)施易陷困局
- 29供應(yīng)鏈上采購(gòu)管理信息化的發(fā)展與應(yīng)用
- 30如何解決醫(yī)藥分析中的重復(fù)測(cè)量問(wèn)題
成都公司:成都市成華區(qū)建設(shè)南路160號(hào)1層9號(hào)
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓
泛普重慶OA行業(yè)資訊其他應(yīng)用
重慶OA軟件 重慶OA新聞動(dòng)態(tài) 重慶OA信息化 重慶OA客戶 重慶OA快博 重慶OA行業(yè)資訊 重慶軟件開(kāi)發(fā)公司 重慶網(wǎng)站建設(shè)公司 重慶物業(yè)管理軟件 重慶餐飲管理軟件 重慶倉(cāng)庫(kù)管理系統(tǒng) 重慶門(mén)禁系統(tǒng) 重慶微信營(yíng)銷 重慶ERP 重慶監(jiān)控公司 重慶金融行業(yè)軟件 重慶B2B、B2C商城系統(tǒng)開(kāi)發(fā) 重慶建筑施工項(xiàng)目管理系統(tǒng)開(kāi)發(fā)
版權(quán)所有:泛普軟件 渝ICP備14008431號(hào)-2 渝公網(wǎng)安備50011202501700號(hào) 咨詢電話:400-8352-114