與.net程序員面試寶典及第7章_第1頁(yè)
與.net程序員面試寶典及第7章_第2頁(yè)
與.net程序員面試寶典及第7章_第3頁(yè)
與.net程序員面試寶典及第7章_第4頁(yè)
與.net程序員面試寶典及第7章_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

7章WebServiceXML技術(shù)進(jìn)行研發(fā)。在.NETXML的支持和應(yīng)用隨處可見(jiàn),最常見(jiàn)的是基于WebService的應(yīng)用。WebService是一種網(wǎng)絡(luò)服務(wù),WebService技術(shù)允許使用者網(wǎng)絡(luò)WebService所提供的服務(wù)。在網(wǎng)絡(luò)快速發(fā)展的今天,這種基于網(wǎng)絡(luò)的分布式服務(wù)已經(jīng)被廣泛地應(yīng)用。本章將討論關(guān)于.NETXMLWebService的面XMLInternet環(huán)境中跨平臺(tái)的、依賴于內(nèi)容的技術(shù),是當(dāng)前處理結(jié)構(gòu)化文檔信息的有力工具。WebService基于簡(jiǎn)單對(duì)象協(xié)議(SOAP),而SOAP本身基于XML語(yǔ)法XML、SOAPXML的基解答關(guān)于XML基本特性的面試題。面試題 XML文檔結(jié)構(gòu)包括哪XMLInternet環(huán)境中跨平臺(tái)的、依賴于內(nèi)容的技術(shù),是當(dāng)前處理結(jié)構(gòu)化文檔信息的XMLXMLXMLXMLXML(ExtensibleMarkupLanguage)HTML一樣,都是是一種簡(jiǎn)單的數(shù)據(jù)語(yǔ)言,使用一系列簡(jiǎn)單的標(biāo)記描述數(shù)據(jù),而這些標(biāo)記可以用方便的方式建立。雖然XML比二進(jìn)制數(shù)據(jù)要占用的空間,但XML極其簡(jiǎn)單、易于掌握和<?xmlversion="1.0" 開始,并以“?>”結(jié)束?!?lt;?”后面緊跟的是處理指令的名稱。XML處理指令要求指定一versionstandaloneencodeing。其中,standalone是指是否允許使用外部,可設(shè)置為yes或no。yes是指定不使用外部;no為使用。encodeing是指作者使用的字符編碼格式,如UTF-8、GBK、gb2312等。XML文件都必須有且只能有一個(gè)根元素,用于描述文檔功能,可以自定義根元素。下例中的root為根元素。以下是代碼片段: 是XML內(nèi)容的基本單元,元素包括了開始、結(jié)束和之間的內(nèi)容。 XML文檔則避免了格式XMLXML文檔。整行統(tǒng)稱為元素,其中XML的標(biāo)記有、注釋、處理指令、DTD和等。在XML中,注釋與HTML指令。XML就是一個(gè)處理指令。PCDATACDATA:是指不要通過(guò)解析器進(jìn)行解析的文本XML就是可擴(kuò)展性標(biāo)記語(yǔ)言,XML是一種簡(jiǎn)單的數(shù)據(jù)語(yǔ)言,使用一系列簡(jiǎn)單的標(biāo)記描述數(shù)據(jù)。在邏輯上,XML文檔組成部分包括、元素、注釋、字符和處理面試題 簡(jiǎn)述XML的優(yōu)缺展性,如表7.1所示。7.1XML XML得以成功的主要因一就是它的基于規(guī)范和標(biāo)準(zhǔn)的開放性。XML技術(shù)根據(jù)XML文檔就能確定該數(shù)據(jù)的意義。同時(shí),XMLDTD檔的定義,我們可以通過(guò)DTD文檔來(lái)檢驗(yàn)XML文檔的有效而且因?yàn)閄ML更容易在應(yīng)用程序間遷移。不同的環(huán)境和操作系統(tǒng)可以互相通信,例如,MathML(數(shù)學(xué)標(biāo)記語(yǔ)言)、CML(化學(xué)標(biāo)記語(yǔ)言)TecML(技術(shù)數(shù)據(jù)標(biāo)記語(yǔ)言),每種語(yǔ)言都用于其特定的環(huán)境。基于上述XML的優(yōu)點(diǎn),CDF框架的所有數(shù)據(jù)都采取了XML的格式,這樣不僅可以在系統(tǒng)的各個(gè)不同模塊之間有了統(tǒng)一對(duì)已有系統(tǒng)的擴(kuò)展。另外,使用XML作為表單的描述格式可以滿足用戶對(duì)表單定當(dāng)然 也有一些缺點(diǎn),在類似問(wèn)題時(shí)需要規(guī)避,比如樹狀、大數(shù)據(jù)量低效率7.2XML 展性。正是由于這些優(yōu)點(diǎn),XML已經(jīng)被應(yīng)用在數(shù)據(jù)交換、WebService、電子商務(wù)、配置分考慮到XML的缺點(diǎn),在設(shè)計(jì)初期就應(yīng)該避免將大數(shù)據(jù)量的信息在XML文件中。面試題96SOAP協(xié)議由哪幾部分SOAPWebService應(yīng)用的基礎(chǔ)協(xié)議,這個(gè)問(wèn)題出現(xiàn)在.NET面試中的幾率非常大。作為.NETWebServiceSOAP的內(nèi)SOAP(SimpleObjectAccessProtocol,簡(jiǎn)單對(duì)象協(xié)議)是一種輕量的、簡(jiǎn)單的、基于XML的協(xié)議,它被設(shè)計(jì)成在Web上交換結(jié)構(gòu)化的和的信息。SOAP可以和現(xiàn)存7.3SOAP組 SOAP封SOAP編碼規(guī)SOAPRPC表SOAP消息基本上是從發(fā)送端到接收端的單向傳輸,但它們常常結(jié)合起來(lái)執(zhí)行類似于請(qǐng)求/SOAPXMSOAP消息就是一個(gè)包含有一個(gè)必需的SOAP的封裝包,一個(gè)可選的SOAP標(biāo)頭和一個(gè)必需的SOAP體塊的XML文檔。SOAP綁定HTTP,可具SOAP的樣式和分散的靈活性HTTP的豐富的特征庫(kù)的優(yōu)點(diǎn)。在HTTP上傳送SOAP并不是說(shuō)SOAP會(huì)覆蓋現(xiàn)有的HTTP語(yǔ)義,而是HTTP上的SOAP語(yǔ)義會(huì)自然地映射到HTTP語(yǔ)義。注意:HTTP作為協(xié)議綁定的場(chǎng)合中,RPCHTTPRPCHTTPRPCSOAPHTTP協(xié)議SOAP是一種輕量的、簡(jiǎn)單的、基于XML的協(xié)議。SOAP技術(shù)有助于實(shí)現(xiàn)大量異構(gòu)程序和平臺(tái)之間的互操作性,從而使存在的應(yīng)用能夠被廣泛的用戶。SOAP是把成熟的基于HTTPWeb技術(shù)與XML的靈活性和可擴(kuò)展性組合在了一起。面試題 什么是WSDL語(yǔ)面章節(jié)中,讀者已經(jīng)了解了WebService的基本協(xié)議SOAP,這已經(jīng)構(gòu)成了架構(gòu)和使用WebService的必備條件。但是在實(shí)際應(yīng)用中,仍然需要一些輔助措施來(lái)協(xié)助WebService更好地提供服務(wù)。本小節(jié)將具體探討這個(gè)問(wèn)題。WSDL(WebServicesDescriptionLanguage)Web服務(wù)和說(shuō)明如何與Web服務(wù)通信的XML語(yǔ)言。WSDL是一種符合XML語(yǔ)范的語(yǔ)言,它的設(shè)計(jì)完全基于SOAP協(xié)議的實(shí)現(xiàn),當(dāng)一個(gè)WebService服務(wù)望為使用者提供服務(wù)說(shuō)明時(shí),WSDL假設(shè)構(gòu)建銷售本項(xiàng)項(xiàng)目名PhoneService。該公司銷售不同型號(hào)的移動(dòng),所以公司W(wǎng)eb服務(wù)的后端數(shù)據(jù)存儲(chǔ)庫(kù)中將包含一個(gè)具有兩列(modelnumber和price)的表格。getListOfModels getPrice getListOfModels()方法提供了一個(gè)字符串?dāng)?shù)組,其中每個(gè)字符串表示一種移動(dòng)的型號(hào)。getPricet()通過(guò)的型號(hào),返回它的價(jià)格。WSDL將這些方法作為操作調(diào)用。以下代碼將開始構(gòu)建WSDL接口文件(WSDLinterfacefile)。<?xml<definitions """/>//<portTypename="<operationname="getListOfModels<operationWSDLWSDL抽象定義和它們的實(shí)現(xiàn)WSDL將指定能夠Web服務(wù)實(shí)際實(shí)現(xiàn)的SOAP服務(wù)器,并且從那時(shí)起SOAP的整個(gè)任務(wù)就是將用戶從WSDL文件帶到它的實(shí)現(xiàn)。WSDL需要一個(gè)附加步驟來(lái)創(chuàng)建該WSDL文件的概要,WSDL將該文件稱為<?xmlversion="1.0"encoding="UTF-8"<definitions //3個(gè)必須做的外部名稱空間 WSDL、SOAP和XSD ><importlocation="interface"/>

WSDL文

//ServiceWeb服務(wù)的名稱和端口的列<service <<//port包含Web服務(wù)的位置和用于此服 <port<soap:addresslocation="servlet/rpcrouter"/>WSDL(WebServicesDescriptionLanguage)是一種符合XML語(yǔ)范的語(yǔ)言,用于WebService方法,其中包括方法的名稱、參數(shù)數(shù)量、各個(gè)參數(shù)的類型以及返回的類型等信息。一個(gè)WSDL文件可以完全地描述整個(gè)服務(wù)器所提供的WebXML在.NETFramework中有著重要的作用,.NETFramework不僅允許在應(yīng)用程序中Web服務(wù)和ADO.NET也使用XML。為了擴(kuò)展使用XML,.NETFramework包含了System.XML命名空間,這個(gè)命名空間帶有許多處理XML的類。本節(jié)將覆蓋有關(guān).NET操作XML的面試題。面試題 C#中如何將XML數(shù)據(jù)島轉(zhuǎn)換為HTML格這個(gè)問(wèn)題是一個(gè)實(shí)際應(yīng)用的技巧,主要應(yīng)聘者對(duì)XML數(shù)據(jù)島以及C#相關(guān)開發(fā)經(jīng)XMLHTMLXMLHTML頁(yè)面中集成XML,對(duì)XML編寫,不需要通過(guò)或<OBJECT>XML。微軟公司在.NET2.0中的XML類中增加了piledTransform類。該類是一個(gè)XSLTXSLT1.0的語(yǔ)法。它相比.NET1.0XslTransform類,性能有顯著的提升,piledTransformXslTransformXML文件加載后執(zhí)行XSLT轉(zhuǎn)換。piledTransformxslt=new .xml", pany.xml代碼如下:<?xml<?xml <Categorygenre="autobiographyBrand="聯(lián)想<Categorygenre="novelBrand="金士頓 te<TABLE" tes te<TD><xsl:value-of<TD><xsl:value-of<TD><xsl:value-of 通過(guò)調(diào)用.NET的piledTransformXML數(shù)據(jù)轉(zhuǎn)換成瀏覽器所能識(shí)別的HTML語(yǔ)言。這個(gè)功能在處理一些具有動(dòng)態(tài)模板的Blog非常實(shí)用。面試題 如何使用DOM操作XML文 是一個(gè)DOM類型,它代表了一個(gè)XML文檔,使用XML 型,可以對(duì)一個(gè)XML文檔進(jìn)行所有期望的操作。本小節(jié)將列舉XML .NETDOM.NETXML文檔對(duì)象模型(DOM)XML文檔的內(nèi)存中表示形式。DOM使程序員能夠以編程方式、處理和修改XML文檔。.NET的文檔對(duì)象模型,是由XMLNode類型及其派生類型來(lái)實(shí)現(xiàn)的,所有這些類型一起,覆蓋了DOM中所有的元素類型。7.1DOM層次結(jié)構(gòu)下列代碼以XML 為例,展示了XML增加、刪除及修改的使用方法。首先使用XML 創(chuàng)建一個(gè)XML文件,代碼如下:stringpath=Server.MapPath(".");path+="\\bookstore.xml"; xmlDoc=newXML

XMLNodeXMLNoderoot=XMLElementxe1=xmlDoc.CreateElement("book");//創(chuàng)建一個(gè)<book>結(jié)點(diǎn)xe1.SetAttribute("genre"," //ISBNXMLElementxesub1xmlDoc.CreateElement("title");//xesub1.InnerText="CS 到精通 XMLElementxesub2=xmlDoc.CreateElement("author");xesub2.InnerText="月關(guān)";XMLElementxesub3=xmlDoc.CreateElement("price");xesub3.InnerText="58.3"; stringstringpath=Server.MapPath(".");path+="\\bookstore.xml"; xmlDoc=new XMLNodeListxnlxmlDoc.SelectSingleNode("bookstore").ChildNodes;foreach(XMLNodexninxnl) {if(xe.GetAttribute("genre")== { }elseif(xe.GetAttribute("genre")== { }} stringstringpath=Server.MapPath(".");path+="\\bookstore.xml"; xmlDoc=newXML XMLNodeListnodeList=foreachXMLNodexnin {if(xe.GetAttribute("genre")=={xe.SetAttribute("genre","updateXMLNodeListnls=xe.ChildNodes;””foreachforeach(XMLNodexn1in{XMLElementxe2=if(xe2.Name=={xe2.InnerText月關(guān)";}}}}通過(guò)使用XML 對(duì)象,可以自由地操作XML文檔中的結(jié)點(diǎn)和屬性,通過(guò)SelectSingleNode()、CreateElement()、AppendChild()等方法及屬性,程序員可以隨意地對(duì)XML文檔進(jìn)行所有期望的操作。面試題 在C#中如何對(duì)XML數(shù)據(jù)進(jìn)行排XML作為一個(gè)被廣泛使用的標(biāo)準(zhǔn)語(yǔ)言,XML的應(yīng)用可以說(shuō)是無(wú)處不在,對(duì)XML數(shù)C#XPathExpressionXML數(shù)XPathExpression類是System.Xml.XPath名字空間里非常有用的一個(gè)類,通過(guò)配合XPathNavigator對(duì)象的使用讀者可以輕松地對(duì)XML數(shù)據(jù)進(jìn)行排序。XpathExpression提供已編譯XPath表達(dá)式的類型化類。當(dāng)程XPathNavigatorCompile()方法時(shí),生成已經(jīng)編譯XPath表達(dá)式。XPathExpression對(duì)象AddSort()方法可XML排序的功能,////1允許使用自定義的排序表達(dá) voidAddSort(objectexpr,IComparer//2是比較常用的方法。這個(gè)方法5個(gè)參數(shù):分別表述排序的對(duì)象、排序的順序、條件的 voidAddSort(objectexpr,XmlSortOrderorder,XmlCaseOrdercaseOrder,stringlang,XmlDataTypedataType當(dāng)對(duì)XPath表達(dá)式添加了排序的功能,可以先將編譯過(guò)的XPath表達(dá)式作為給XPathNavigator對(duì)象的Select()方法,Select()方法返回一個(gè)XPathNodeItor對(duì)象,這時(shí)就可以使用這個(gè)返回對(duì)象對(duì)XML進(jìn)行遍歷排序。PrivatePrivatestring{StringBuilders=newStringBuilder();stringxpath="/Customers/XMLName";doc=newXPathNavigatornav=doc.CreateNavigator();XPathExpressionexp= tornodeIter2=nav.Select(exp);while(nodeIter2.MoveNext()){s.Append(nodeIter2.Current.Value+"<br}return}行排序;也可以使用XSLT進(jìn)行排序。XML數(shù)據(jù)排序的方法多種多樣,最常見(jiàn)的使XSLTXML文檔中的字符串或數(shù)字xsl:sortxsl:for-each進(jìn)行循環(huán)時(shí)對(duì)XML數(shù)據(jù)進(jìn)行排序,這個(gè)元素的功能很方便,而且簡(jiǎn)單。但在實(shí)際的工作中針對(duì)一些復(fù)XMLXMLxsl:sort元素顯然不能滿足要求,筆者在這推薦使用C#中XPathExpression類對(duì)XML數(shù)據(jù)進(jìn)行排序。面試題 .NET中如何讀寫流格式的通過(guò)前面章節(jié)的學(xué)習(xí)讀者已經(jīng)掌握了XML通過(guò)DOM對(duì)象讀寫XML文件,那么通過(guò)什么方式可以讀寫流格式的XML。本小節(jié)將解答如何實(shí)現(xiàn)這樣的需求。多處理XML的類。如XML(這是DOM實(shí)現(xiàn)方式)類,以及.NET為SAX提供一種接口,也是指一個(gè)軟件包。SAX是一個(gè)用于處理XML驅(qū)動(dòng)的“推”模型,雖然它不是W3C標(biāo)準(zhǔn),但它卻是一個(gè)得到了廣泛認(rèn)可的API。注意:SAX解析器不像DOM那樣建立一個(gè)完整的文檔樹,而是在文檔時(shí)激活一系XMLReaderSAXSAX是一種推模型(XML數(shù)XMLReaderrdr=//創(chuàng)建一個(gè)新的XMLReader實(shí)while{ifrdr.NodeType elseif(rdr.NodeType== elseif(rdr.NodeType== }XMLWriter類可以把XML寫入一個(gè)流、文件、StringBuilder、TextWriter或另一個(gè)XMLWriter對(duì)象中。與XMLReader一樣,XMLWriter類以只向前、未緩存的方式進(jìn)行寫//使用XMLWirterSettings對(duì)象進(jìn)行是否縮進(jìn)文本、縮進(jìn)量等配置XMLWriterSettingssettings=newXMLWriterSettings();settings.Indent=true; settings.NewLineOnAttributes=true;//把每個(gè)屬性寫在一行,這樣做可以更容易XMLXMLWriterwriter= writer.WriteElementString("title","CaseoftheMoney"); //關(guān)閉任何打開的元素或?qū)傩圆⒕帉懫髦匦略O(shè)置為Start

XMLXMLReaderNodeType、Value等屬性或方法可以方便快捷地XML中指定的數(shù)據(jù),但XMLReader不能夠?qū)ν幻臻g的XMLWriter對(duì)象,它提供了簡(jiǎn)單便捷的XML文件寫操作的功能。面試102.NET中如何實(shí)XML串行微軟已經(jīng)串行化XML數(shù)據(jù)的重要性,因此在.NET框架中包含了命名空間小節(jié)將解答如何實(shí)現(xiàn)XML串行化。I/O的一種機(jī)制,該機(jī)制在框架(Frame)/文檔()/視圖(View)模式中得到了很好的應(yīng)用。串行化的目的是數(shù)據(jù)和數(shù)據(jù)轉(zhuǎn)換。數(shù)據(jù)指的是在用戶會(huì)話時(shí)保存數(shù)據(jù),當(dāng)應(yīng)用程序關(guān)閉時(shí),數(shù)據(jù)被保存(串被另一個(gè)系統(tǒng)識(shí)別的格式,使用串行化和XML,可以很方便地進(jìn)行數(shù)據(jù)轉(zhuǎn)換。XMLSerializerXMLXML文檔非串行化為對(duì)象的函數(shù)的參數(shù)。下面的C#代碼說(shuō)明了構(gòu)造函數(shù)的用法:XMLSerializerser=new 實(shí)際的串行化過(guò)程在XMLSerializer類的Serialize()方法中實(shí)現(xiàn)。該方法允許在串行化過(guò)在本例中一個(gè)對(duì)象被串行化保存到本地磁盤的一個(gè)文件當(dāng)中,例子中首先是類,后面usingusingusingSystem.IO;namespace{publicclass{publicstringAddress1;publicstringCountry;}publicclass{publicstringFirstName;publicstringLastName;publicstringpublicAddress }publicclass {publicstring publicAuthor publicdouble}class{staticvoidMain(string[]{BookBookObjectnew XMLSerializerser=newTextWriterwriter=newStreamWriter("booktest.xml");BookObject.Title="PracticalLotusScript";BookObject.RetailPrice=43.95;BookObject.AuthorObject=newAuthor();BookObject.AuthorObject.FirstName="Tony";BookObject.AuthorObject.LastName="Patton";//Author對(duì)象中的Address對(duì)象BookObject.AuthorObject.AddressObject=newAddress();BookObject.AuthorObject.AddressObject.Address"1MainStreet";BookObject.AuthorObject.AddressObject.Country="USA";ser.Serialize(writer,BookObject);//將對(duì)象序列化到XML文檔中 //關(guān)閉TextWriter對(duì)象,釋放資源}}}下是例子程序產(chǎn)生的XML文檔。<?xml<?xmlversion="1.0"encoding="utf-<Bookxmlns:xsd="<Title>Practical<Address>1Main"串行化XML是指為了方便或傳輸,把一個(gè)對(duì)象的公共的域和屬性保存為一種串XML文件的方法。WebService用程序組織模式擴(kuò)展到以網(wǎng)絡(luò)為中心的組織模式,.NETFrameworkWebService的支持,無(wú)論是WebService,還是創(chuàng)建WebService,使用.NET都能快速有效地實(shí)現(xiàn)功能。本小節(jié)將著重覆蓋關(guān)于使用.NET開發(fā)WebService服務(wù)端和客戶端的面試題。面試103如何在.NET項(xiàng)目中調(diào)Web在.NETWebServiceC#中普通的方法添加一個(gè)特性,就能把這個(gè)方法定義為WebService方法,而無(wú)須做任Service。那么,如何在.NET項(xiàng)目中調(diào)用WebService?安裝時(shí),asmx文件也會(huì)在IIS中被成由ASP.NET組件來(lái)處理。也就是說(shuō),一個(gè)后綴名為asmx文件和其代碼組成了一個(gè)WebService資源。在這個(gè)組合中,asmx文件只是作為一個(gè)資源文件出現(xiàn),并且WebServiceSOAP請(qǐng)?jiān)谶壿嫷奶幚鞸OAP通信的工作,.NET提供了WebService類型和WebMethod特性。在繼承自WebService類型中的公共方法上添加WebMethod特性就可以其為一個(gè)WebService方法。下面是一個(gè)具體的示例。Web站點(diǎn)時(shí)選擇“ASP.NETWebnamespacenamespace{//////Service1 ///</summary>[WebService(Namespace="[WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)] //若要允許使用ASP.NETAJAX 中調(diào)用此Web服務(wù),請(qǐng)取消對(duì)下行的注////publicclassService1:{publicstring{return}o}}VisualStudioWebServiceoWorld()WebMethodWebService方法。WebServiceWebMethodSOAP通信的工作,程序員只需致力于處理邏輯工作即可??傊?,WebServiceWebMethod為程序員提SOAP處理功能,而在絕大多數(shù)情況下,程序員所要做的就是在此基礎(chǔ)上擴(kuò)ASP.NETWebServiceASP.NETWebReferences上右WebService的地址,在Web名的文本框中輸入一個(gè)定義的名稱,然后單擊“添加引用”按鈕,如圖7.2所示。7.2WebServicenamespacenamespace{publicpartialclassTest:{protectedvoidPage_Load(objectsender,EventArgs{WebServiceTest.Service1wsnewWebApplicationDemo.WebServiceTest.Service1();Label1.Text=ws. oWorld();//newWebApplicationDemo.WebServiceTest.Service1();Label1.Text=ws. oWorld();//調(diào)用WebService方法返回 }}}這樣就完成了WebService的調(diào)用,整個(gè)過(guò)程序員所添加的代碼很少,僅兩行就可以完成oWord()方法的調(diào)用。在.NETWebServiceWebMethodWebService,在ASP.NET中,可以很容易地通過(guò)添加一個(gè)新的Web、輸入其對(duì)應(yīng)的WebService地址進(jìn)而完成WebService的調(diào)用。面試題 什么是異步請(qǐng)求WebWebWeb服務(wù)請(qǐng)求響應(yīng)并不是立即提供而是在最初請(qǐng)求事務(wù)完成后某個(gè)時(shí)候提供Web服務(wù)。這個(gè)問(wèn)題主要應(yīng)聘者對(duì)WebService異步請(qǐng)求機(jī)制的理解及應(yīng)用。由于服務(wù)器處理速度、網(wǎng)絡(luò)傳輸速度等,會(huì)使一個(gè)WebService從請(qǐng)求開始致客戶端無(wú)法進(jìn)行其他的動(dòng)作或處理。這時(shí)候就需要異步地使用WebService。最容易被想到的方法當(dāng)然是建立一個(gè)新的線程來(lái)執(zhí)行WebService的請(qǐng)求并獲得結(jié)果,下面的示例參考了.NETSDKWebServiceWebService的程序。其中以下示例代碼是定義要調(diào)用的WebServices的示例,代碼如下:usingusingusingSystem.Web;usingusingSystem.Threading;namespace{//////Summarydescriptionfor///[WebService(Namespace=" [WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)] WebServices運(yùn)行script,主要應(yīng)用在ASP.NET////publicclassAsyncWebService:{[WebMethod(Description異步調(diào)用演示")]publicstringAsyncMethodTest(){ return }}}usingnamespace{publicpartialclassAsyncDemo:{protectedvoidButton2_Click(objectsender,EventArgs{AsyncServices.AsyncWebServicews=newWebApplicationDemo.AsyncServices.AsyncWebService(); new this.TextBox1.Text+"["+System.DateTime.Now.ToString()+"]";}voidws_ pleted(objectsource, EventArgse){this.TextBox1.Text+=this.TextBox1.Text+="["+System.DateTime.Now.ToString()+}}}<%@<%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="AsyncDemo.aspx.cs"Inherits="WebApplicationDemo.AsyncDemo"Async="true"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN <html "<headrunat="server"><formid="form1"<asp:LabelID="Label1"runat="server"Text="Label"></asp:Label> <asp:TextBoxID="TextBox1"runat="server"Width="507px"Height= ;<br<asp:ButtonID="Button2"runat="server"Text="asynchronous1"onclick="Button2_Click"/>[2009-05-04[2009-05-04[2009-05-04從運(yùn)行結(jié)果記錄的時(shí)間可以發(fā)現(xiàn),ASP.NETWebService方法是ASP.NET的線程,并沒(méi)有阻塞,這樣可以達(dá)到ASP.NET異步處理ASP.NET異步調(diào)用的方法是使用WebService的方法名+Async()作為異步調(diào)用的方法名。面試題 如何緩存WebService數(shù)在WebService開發(fā)的過(guò),WebService的性能一直困擾著大多數(shù)程序員。針對(duì)數(shù)這個(gè)問(wèn)題主要應(yīng)聘者的經(jīng)驗(yàn)以及對(duì)WebService緩存機(jī)制的理解及應(yīng)用。HTTPWeb服務(wù)(XMLWebInternetWeb服務(wù)),實(shí)際上可以高如,產(chǎn)品、銷售信息、歷史財(cái)務(wù)數(shù)據(jù)以及定價(jià)數(shù)據(jù))。WebMethodBufferResponsetrueXMLWebServices方對(duì)響應(yīng)的緩沖處理,該響應(yīng)就通過(guò)網(wǎng)絡(luò)返回到XMLWebServices客戶端。當(dāng)BufferResponsefalseXMLWebServices方法的響應(yīng)在被序列化的同時(shí)被發(fā)回客注意:只有當(dāng)已知XMLWebServices方法將大量數(shù)據(jù)返回到客戶端時(shí),才需要將BufferResponse設(shè)置false。對(duì)于少量數(shù)BufferResponse設(shè)置true可提高XMLWebServices的性能。usingusingusingSystem.Web;usingSystem.Web.Services;namespaceWebServiceDemo{//////Summarydescriptionfor///[WebService(Namespace=" [WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)] //publicclassAsyncWebService:{BufferResponse=TrueWebService數(shù)//CacheDuration=10表示緩存時(shí)間為10秒[WebMethod(Description返回緩存了的服務(wù)器時(shí)間數(shù)據(jù)",BufferResponse=true,CacheDuration=10)]publicstringGetServerTime(){returnSystem.DateTime.Now.ToString();//返回當(dāng)前服務(wù)器的時(shí)}}}WebMethodBufferResponsetrueXMLWebServices方現(xiàn)了對(duì)WebService的高速緩存。面試題 WebService中的事務(wù)處理有哪事務(wù)最常用的一個(gè)場(chǎng)合就是數(shù)據(jù)庫(kù),這個(gè)問(wèn)題主要應(yīng)聘者WebService開發(fā)HTTP協(xié)議的無(wú)狀態(tài)特性,XMLWebServices方法只能作為根對(duì)象參與事務(wù)。如記為在事務(wù)內(nèi)運(yùn)行,XMLWebServices方法就可以調(diào)用這些COM對(duì)象。如果一個(gè)TransactionOption屬性為Required或RequiresNew的XMLWebServicesXMLWebServicesXMLWebServices方法只能用作事務(wù)中的根對(duì)象。表7.6列出了TransactionOption枚舉。7.6TransactionOption枚 指示XMLWebServices方法不在事務(wù)的范圍內(nèi)運(yùn)行。當(dāng)處的情況下執(zhí)行XMLWebServices方NotSupportedXMLWebServices方法不在事務(wù)的范圍內(nèi)運(yùn)行。當(dāng)處理請(qǐng)求時(shí),將在沒(méi)有事務(wù)的情況下執(zhí)行XMLWebServices方法SupportedXMLWebServices方法不在事務(wù)范圍內(nèi)運(yùn)行。當(dāng)處理請(qǐng)求時(shí),將在沒(méi)有事務(wù)的情況下創(chuàng)建XMLWebServicesXMLWebServices方法需要事務(wù)。由于XMLWebServices方法只能作為根對(duì)象參與事務(wù),因此將為XMLWebServices方法創(chuàng)建一個(gè)新事務(wù)RequiresNewXMLWebServices方法需要新事務(wù)。當(dāng)內(nèi)創(chuàng)建XMLWebusingusingusingSystem.Reflection; {…}:{…}WebService中支持5個(gè)級(jí)別的事務(wù),分別為Transaction特性中的Disabled、NotSupported、Supported、Required和RequiresNew。面試題107如何處理WebService中的異異常處理在程序的開發(fā)過(guò)必不可缺,因?yàn)檎{(diào)用WebService方法畢竟和調(diào)用本地方法有所區(qū)別,所以Web Service的異常處理也有所不同。可以想象,如果希望捕獲Web本小節(jié)將借助回答問(wèn)題,來(lái)回答WebService中的異常機(jī)制。行期間發(fā)生了異常,Web服務(wù)應(yīng)該不只是捕捉到異常,還應(yīng)該把異常傳回給Web服務(wù)的WebWeb服務(wù)中發(fā)生SOAP規(guī)范。.NETSOAPExceptionWeb服務(wù)中拋出異常,而SOAPException對(duì)象提供了一種表示SOAPFault的工業(yè)標(biāo)準(zhǔn)方法。在Web服務(wù)中處理異常與在Web或Windows應(yīng)用程序中處理異常沒(méi)有什么區(qū)別。但是,在設(shè)計(jì)Web服務(wù)中的異常塊時(shí),必須明白一個(gè)事實(shí),即需要以一種平臺(tái)無(wú)關(guān)的基于SOAP規(guī)范的方式把異常信息傳遞給Web服務(wù)的客戶端。為了達(dá)到這個(gè)目的,應(yīng)該使用性來(lái)設(shè)置SOAPException對(duì)象。Message:異常的內(nèi)容。 Detail:空,但Detail元素可以用于把的異常信息傳遞給調(diào)用者。依據(jù)上面的分析,筆者將SOAPException進(jìn)一步封裝,代碼如下:publicpublicenum{=Server=}param paramname="errorMessage">錯(cuò)誤信息paramname="errorNumber">錯(cuò)誤號(hào)paramname="errorSource">錯(cuò)誤源paramname="code">異常類型publicSOAPExceptionstringstringerrorNumber,stringerrorSource,FaultCodecode){XMLQualifiedNamefaultCodeLocationnull;//初始化限定switchswitch{case faultCodeLocation= casefaultCodeLocation=SOAPException.ServerFaultCode;}stringstrXMLOut=++"<ErrorNumber>"+errorNumber++"<ErrorSource>"+errorSource+++ xmlDoc=newXML //實(shí)例化SOAPExceptionSOAPExceptionsoapExnewSOAPException(errorMessage,uri, return }[WebMethod(Description[WebMethod(Description測(cè)試直接拋出異常{Info }publicpublicclass{publicstringErrorNumber=publicstringErrorMessage=publicstringErrorSource=SOAPExceptionInfo構(gòu)造方publicSOAPExceptionInfo(SOAPException{ doc=newXML XMLNodecategoryNode=doc. this.ErrorNumber=categoryNode.SelectSingleNode("ErrorNumber").this.ErrorSource=categoryNode.SelectSingleNode("ErrorSource").}}WebServiceSOAPExceptionInfoSOAPException類的publicpublicvoid{WSDemoServicewsnewWSDemoService();//客戶端調(diào)WebServices{ }catchSOAPException {SOAPExceptionInfosoapExInfo=newSOAPExceptionInfo(soapEx);thrownewSystem.Exception(soapExInfo.ErrorMessage);}}SOAPException類型SOAPException業(yè)務(wù)異常信息,可以對(duì)SOAPException進(jìn)行封裝,生成便于理解的業(yè)務(wù)異常信息。WebServiceWebServiceWebService最大的一個(gè)亮點(diǎn),但是隨之而來(lái)的安全問(wèn)題也成為大家關(guān)注的焦點(diǎn)。IBM、微軟公司等大型提供商一起提出了WS-Security面試題 請(qǐng)列舉常見(jiàn)的WebService安全措WebService目前被企業(yè)所廣泛應(yīng)用。從應(yīng)用的角度來(lái)看,WebService技術(shù)的確具有個(gè)企業(yè)不得不關(guān)注的問(wèn)題。本小節(jié)將介紹幾種常見(jiàn)的WebService安全措施。WS-Windows驗(yàn)證WS-SecurityWS-Security中定用于驗(yàn)證;X.509還使用現(xiàn)有的PKI進(jìn)行密鑰管理;XML加密和XML簽名描述了XML消息內(nèi)容的加密和簽名方法;XML標(biāo)準(zhǔn)描述了為簽名和加密而準(zhǔn)備XML的方法。SSLWebService服務(wù)器與客戶端之間的通信擁有更高級(jí)別的安全WebService應(yīng)用,在考慮到企業(yè)自身的實(shí)力以及有限資源條件下。通常采用自定識(shí)別的方式進(jìn)行簡(jiǎn)單有效的安全措施,這種方式的好處是開發(fā)周說(shuō)明:無(wú)論采用何種WebService安全方案都要注意是否具備數(shù)據(jù)的 性、用戶的驗(yàn)證、用戶的、預(yù)防用戶抵賴這5個(gè)條件。一下IBM、微軟等公司的一些成功案例。本小節(jié)列舉了WS-Security、配置SSL、SOAP標(biāo)頭驗(yàn)證、Windows驗(yàn)證這4種常見(jiàn)的安全措施。面試題 在WebService中如何采用Windows驗(yàn)證和WebService是一個(gè)開放的平臺(tái),針對(duì)企業(yè)級(jí)用戶WebService的安全機(jī)制一直以來(lái)是多數(shù)公司關(guān)注的問(wèn)題。本小節(jié)將主要應(yīng)聘者在Intranet環(huán)境中WebService使用經(jīng)驗(yàn)。驗(yàn)Windows驗(yàn)證驗(yàn)證就是為了證實(shí)發(fā)送方的,同樣WebService驗(yàn)證的目的,也是為了一般可通過(guò)Windows驗(yàn)證來(lái)保證XMLWeb服務(wù)的安全性。若需要驗(yàn)證,請(qǐng)若要允許或特定的用戶服務(wù),請(qǐng)使用ASP.NET配置系統(tǒng),或在服務(wù)文件本身中ACL。示例代碼如下:<authentication<location<allow<allow <denyroles="BUILTIN\PowerXMLWebWindows用戶運(yùn)行的情況。一個(gè)簡(jiǎn)單的WebService。usingusingSystem.Web.Services;usingSystem;classSecurityService:{publicString{ 這個(gè)WebService方法}}WebService類提供兩個(gè)屬性:Username和Password??梢允褂眠@兩個(gè)屬性指定憑據(jù),并通過(guò)憑據(jù)連接到Web服務(wù),必須將它們?cè)O(shè)置成Web服務(wù)的計(jì)算機(jī)或域上的有效Windows憑據(jù)。代碼如下:<%@<%@ImportNamespace="SecurityService"<scriptlanguage="C#"publicvoidPage_Load(Objectsender,EventArgs{SecurityServicesnew 驗(yàn)證方案(如基本、簡(jiǎn)要、NTLM和 Mess

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論