




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
7章WebServiceXML技術(shù)進行研發(fā)。在.NETXML的支持和應(yīng)用隨處可見,最常見的是基于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)境中跨平臺的、依賴于內(nèi)容的技術(shù),是當(dāng)前處理結(jié)構(gòu)化文檔信息的有力工具。WebService基于簡單對象協(xié)議(SOAP),而SOAP本身基于XML語法XML、SOAPXML的基解答關(guān)于XML基本特性的面試題。面試題 XML文檔結(jié)構(gòu)包括哪XMLInternet環(huán)境中跨平臺的、依賴于內(nèi)容的技術(shù),是當(dāng)前處理結(jié)構(gòu)化文檔信息的XMLXMLXMLXMLXML(ExtensibleMarkupLanguage)HTML一樣,都是是一種簡單的數(shù)據(jù)語言,使用一系列簡單的標(biāo)記描述數(shù)據(jù),而這些標(biāo)記可以用方便的方式建立。雖然XML比二進制數(shù)據(jù)要占用的空間,但XML極其簡單、易于掌握和<?xmlversion="1.0" 開始,并以“?>”結(jié)束?!?lt;?”后面緊跟的是處理指令的名稱。XML處理指令要求指定一versionstandaloneencodeing。其中,standalone是指是否允許使用外部,可設(shè)置為yes或no。yes是指定不使用外部;no為使用。encodeing是指作者使用的字符編碼格式,如UTF-8、GBK、gb2312等。XML文件都必須有且只能有一個根元素,用于描述文檔功能,可以自定義根元素。下例中的root為根元素。以下是代碼片段: 是XML內(nèi)容的基本單元,元素包括了開始、結(jié)束和之間的內(nèi)容。 XML文檔則避免了格式XMLXML文檔。整行統(tǒng)稱為元素,其中XML的標(biāo)記有、注釋、處理指令、DTD和等。在XML中,注釋與HTML指令。XML就是一個處理指令。PCDATACDATA:是指不要通過解析器進行解析的文本XML就是可擴展性標(biāo)記語言,XML是一種簡單的數(shù)據(jù)語言,使用一系列簡單的標(biāo)記描述數(shù)據(jù)。在邏輯上,XML文檔組成部分包括、元素、注釋、字符和處理面試題 簡述XML的優(yōu)缺展性,如表7.1所示。7.1XML XML得以成功的主要因一就是它的基于規(guī)范和標(biāo)準(zhǔn)的開放性。XML技術(shù)根據(jù)XML文檔就能確定該數(shù)據(jù)的意義。同時,XMLDTD檔的定義,我們可以通過DTD文檔來檢驗XML文檔的有效而且因為XML更容易在應(yīng)用程序間遷移。不同的環(huán)境和操作系統(tǒng)可以互相通信,例如,MathML(數(shù)學(xué)標(biāo)記語言)、CML(化學(xué)標(biāo)記語言)TecML(技術(shù)數(shù)據(jù)標(biāo)記語言),每種語言都用于其特定的環(huán)境。基于上述XML的優(yōu)點,CDF框架的所有數(shù)據(jù)都采取了XML的格式,這樣不僅可以在系統(tǒng)的各個不同模塊之間有了統(tǒng)一對已有系統(tǒng)的擴展。另外,使用XML作為表單的描述格式可以滿足用戶對表單定當(dāng)然 也有一些缺點,在類似問題時需要規(guī)避,比如樹狀、大數(shù)據(jù)量低效率7.2XML 展性。正是由于這些優(yōu)點,XML已經(jīng)被應(yīng)用在數(shù)據(jù)交換、WebService、電子商務(wù)、配置分考慮到XML的缺點,在設(shè)計初期就應(yīng)該避免將大數(shù)據(jù)量的信息在XML文件中。面試題96SOAP協(xié)議由哪幾部分SOAPWebService應(yīng)用的基礎(chǔ)協(xié)議,這個問題出現(xiàn)在.NET面試中的幾率非常大。作為.NETWebServiceSOAP的內(nèi)SOAP(SimpleObjectAccessProtocol,簡單對象協(xié)議)是一種輕量的、簡單的、基于XML的協(xié)議,它被設(shè)計成在Web上交換結(jié)構(gòu)化的和的信息。SOAP可以和現(xiàn)存7.3SOAP組 SOAP封SOAP編碼規(guī)SOAPRPC表SOAP消息基本上是從發(fā)送端到接收端的單向傳輸,但它們常常結(jié)合起來執(zhí)行類似于請求/SOAPXMSOAP消息就是一個包含有一個必需的SOAP的封裝包,一個可選的SOAP標(biāo)頭和一個必需的SOAP體塊的XML文檔。SOAP綁定HTTP,可具SOAP的樣式和分散的靈活性HTTP的豐富的特征庫的優(yōu)點。在HTTP上傳送SOAP并不是說SOAP會覆蓋現(xiàn)有的HTTP語義,而是HTTP上的SOAP語義會自然地映射到HTTP語義。注意:HTTP作為協(xié)議綁定的場合中,RPCHTTPRPCHTTPRPCSOAPHTTP協(xié)議SOAP是一種輕量的、簡單的、基于XML的協(xié)議。SOAP技術(shù)有助于實現(xiàn)大量異構(gòu)程序和平臺之間的互操作性,從而使存在的應(yīng)用能夠被廣泛的用戶。SOAP是把成熟的基于HTTPWeb技術(shù)與XML的靈活性和可擴展性組合在了一起。面試題 什么是WSDL語面章節(jié)中,讀者已經(jīng)了解了WebService的基本協(xié)議SOAP,這已經(jīng)構(gòu)成了架構(gòu)和使用WebService的必備條件。但是在實際應(yīng)用中,仍然需要一些輔助措施來協(xié)助WebService更好地提供服務(wù)。本小節(jié)將具體探討這個問題。WSDL(WebServicesDescriptionLanguage)Web服務(wù)和說明如何與Web服務(wù)通信的XML語言。WSDL是一種符合XML語范的語言,它的設(shè)計完全基于SOAP協(xié)議的實現(xiàn),當(dāng)一個WebService服務(wù)望為使用者提供服務(wù)說明時,WSDL假設(shè)構(gòu)建銷售本項項目名PhoneService。該公司銷售不同型號的移動,所以公司W(wǎng)eb服務(wù)的后端數(shù)據(jù)存儲庫中將包含一個具有兩列(modelnumber和price)的表格。getListOfModels getPrice getListOfModels()方法提供了一個字符串?dāng)?shù)組,其中每個字符串表示一種移動的型號。getPricet()通過的型號,返回它的價格。WSDL將這些方法作為操作調(diào)用。以下代碼將開始構(gòu)建WSDL接口文件(WSDLinterfacefile)。<?xml<definitions """/>//<portTypename="<operationname="getListOfModels<operationWSDLWSDL抽象定義和它們的實現(xiàn)WSDL將指定能夠Web服務(wù)實際實現(xiàn)的SOAP服務(wù)器,并且從那時起SOAP的整個任務(wù)就是將用戶從WSDL文件帶到它的實現(xiàn)。WSDL需要一個附加步驟來創(chuàng)建該WSDL文件的概要,WSDL將該文件稱為<?xmlversion="1.0"encoding="UTF-8"<definitions //3個必須做的外部名稱空間 WSDL、SOAP和XSD ><importlocation="interface"/>
WSDL文
//ServiceWeb服務(wù)的名稱和端口的列<service <<//port包含Web服務(wù)的位置和用于此服 <port<soap:addresslocation="servlet/rpcrouter"/>WSDL(WebServicesDescriptionLanguage)是一種符合XML語范的語言,用于WebService方法,其中包括方法的名稱、參數(shù)數(shù)量、各個參數(shù)的類型以及返回的類型等信息。一個WSDL文件可以完全地描述整個服務(wù)器所提供的WebXML在.NETFramework中有著重要的作用,.NETFramework不僅允許在應(yīng)用程序中Web服務(wù)和ADO.NET也使用XML。為了擴展使用XML,.NETFramework包含了System.XML命名空間,這個命名空間帶有許多處理XML的類。本節(jié)將覆蓋有關(guān).NET操作XML的面試題。面試題 C#中如何將XML數(shù)據(jù)島轉(zhuǎn)換為HTML格這個問題是一個實際應(yīng)用的技巧,主要應(yīng)聘者對XML數(shù)據(jù)島以及C#相關(guān)開發(fā)經(jīng)XMLHTMLXMLHTML頁面中集成XML,對XML編寫,不需要通過或<OBJECT>XML。微軟公司在.NET2.0中的XML類中增加了piledTransform類。該類是一個XSLTXSLT1.0的語法。它相比.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 通過調(diào)用.NET的piledTransformXML數(shù)據(jù)轉(zhuǎn)換成瀏覽器所能識別的HTML語言。這個功能在處理一些具有動態(tài)模板的Blog非常實用。面試題 如何使用DOM操作XML文 是一個DOM類型,它代表了一個XML文檔,使用XML 型,可以對一個XML文檔進行所有期望的操作。本小節(jié)將列舉XML .NETDOM.NETXML文檔對象模型(DOM)XML文檔的內(nèi)存中表示形式。DOM使程序員能夠以編程方式、處理和修改XML文檔。.NET的文檔對象模型,是由XMLNode類型及其派生類型來實現(xiàn)的,所有這些類型一起,覆蓋了DOM中所有的元素類型。7.1DOM層次結(jié)構(gòu)下列代碼以XML 為例,展示了XML增加、刪除及修改的使用方法。首先使用XML 創(chuàng)建一個XML文件,代碼如下:stringpath=Server.MapPath(".");path+="\\bookstore.xml"; xmlDoc=newXML
XMLNodeXMLNoderoot=XMLElementxe1=xmlDoc.CreateElement("book");//創(chuàng)建一個<book>結(jié)點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)";}}}}通過使用XML 對象,可以自由地操作XML文檔中的結(jié)點和屬性,通過SelectSingleNode()、CreateElement()、AppendChild()等方法及屬性,程序員可以隨意地對XML文檔進行所有期望的操作。面試題 在C#中如何對XML數(shù)據(jù)進行排XML作為一個被廣泛使用的標(biāo)準(zhǔn)語言,XML的應(yīng)用可以說是無處不在,對XML數(shù)C#XPathExpressionXML數(shù)XPathExpression類是System.Xml.XPath名字空間里非常有用的一個類,通過配合XPathNavigator對象的使用讀者可以輕松地對XML數(shù)據(jù)進行排序。XpathExpression提供已編譯XPath表達式的類型化類。當(dāng)程XPathNavigatorCompile()方法時,生成已經(jīng)編譯XPath表達式。XPathExpression對象AddSort()方法可XML排序的功能,////1允許使用自定義的排序表達 voidAddSort(objectexpr,IComparer//2是比較常用的方法。這個方法5個參數(shù):分別表述排序的對象、排序的順序、條件的 voidAddSort(objectexpr,XmlSortOrderorder,XmlCaseOrdercaseOrder,stringlang,XmlDataTypedataType當(dāng)對XPath表達式添加了排序的功能,可以先將編譯過的XPath表達式作為給XPathNavigator對象的Select()方法,Select()方法返回一個XPathNodeItor對象,這時就可以使用這個返回對象對XML進行遍歷排序。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進行排序。XML數(shù)據(jù)排序的方法多種多樣,最常見的使XSLTXML文檔中的字符串或數(shù)字xsl:sortxsl:for-each進行循環(huán)時對XML數(shù)據(jù)進行排序,這個元素的功能很方便,而且簡單。但在實際的工作中針對一些復(fù)XMLXMLxsl:sort元素顯然不能滿足要求,筆者在這推薦使用C#中XPathExpression類對XML數(shù)據(jù)進行排序。面試題 .NET中如何讀寫流格式的通過前面章節(jié)的學(xué)習(xí)讀者已經(jīng)掌握了XML通過DOM對象讀寫XML文件,那么通過什么方式可以讀寫流格式的XML。本小節(jié)將解答如何實現(xiàn)這樣的需求。多處理XML的類。如XML(這是DOM實現(xiàn)方式)類,以及.NET為SAX提供一種接口,也是指一個軟件包。SAX是一個用于處理XML驅(qū)動的“推”模型,雖然它不是W3C標(biāo)準(zhǔn),但它卻是一個得到了廣泛認(rèn)可的API。注意:SAX解析器不像DOM那樣建立一個完整的文檔樹,而是在文檔時激活一系XMLReaderSAXSAX是一種推模型(XML數(shù)XMLReaderrdr=//創(chuàng)建一個新的XMLReader實while{ifrdr.NodeType elseif(rdr.NodeType== elseif(rdr.NodeType== }XMLWriter類可以把XML寫入一個流、文件、StringBuilder、TextWriter或另一個XMLWriter對象中。與XMLReader一樣,XMLWriter類以只向前、未緩存的方式進行寫//使用XMLWirterSettings對象進行是否縮進文本、縮進量等配置XMLWriterSettingssettings=newXMLWriterSettings();settings.Indent=true; settings.NewLineOnAttributes=true;//把每個屬性寫在一行,這樣做可以更容易XMLXMLWriterwriter= writer.WriteElementString("title","CaseoftheMoney"); //關(guān)閉任何打開的元素或?qū)傩圆⒕帉懫髦匦略O(shè)置為Start
XMLXMLReaderNodeType、Value等屬性或方法可以方便快捷地XML中指定的數(shù)據(jù),但XMLReader不能夠?qū)ν幻臻g的XMLWriter對象,它提供了簡單便捷的XML文件寫操作的功能。面試102.NET中如何實XML串行微軟已經(jīng)串行化XML數(shù)據(jù)的重要性,因此在.NET框架中包含了命名空間小節(jié)將解答如何實現(xiàn)XML串行化。I/O的一種機制,該機制在框架(Frame)/文檔()/視圖(View)模式中得到了很好的應(yīng)用。串行化的目的是數(shù)據(jù)和數(shù)據(jù)轉(zhuǎn)換。數(shù)據(jù)指的是在用戶會話時保存數(shù)據(jù),當(dāng)應(yīng)用程序關(guān)閉時,數(shù)據(jù)被保存(串被另一個系統(tǒng)識別的格式,使用串行化和XML,可以很方便地進行數(shù)據(jù)轉(zhuǎn)換。XMLSerializerXMLXML文檔非串行化為對象的函數(shù)的參數(shù)。下面的C#代碼說明了構(gòu)造函數(shù)的用法:XMLSerializerser=new 實際的串行化過程在XMLSerializer類的Serialize()方法中實現(xiàn)。該方法允許在串行化過在本例中一個對象被串行化保存到本地磁盤的一個文件當(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對象中的Address對象BookObject.AuthorObject.AddressObject=newAddress();BookObject.AuthorObject.AddressObject.Address"1MainStreet";BookObject.AuthorObject.AddressObject.Country="USA";ser.Serialize(writer,BookObject);//將對象序列化到XML文檔中 //關(guān)閉TextWriter對象,釋放資源}}}下是例子程序產(chǎn)生的XML文檔。<?xml<?xmlversion="1.0"encoding="utf-<Bookxmlns:xsd="<Title>Practical<Address>1Main"串行化XML是指為了方便或傳輸,把一個對象的公共的域和屬性保存為一種串XML文件的方法。WebService用程序組織模式擴展到以網(wǎng)絡(luò)為中心的組織模式,.NETFrameworkWebService的支持,無論是WebService,還是創(chuàng)建WebService,使用.NET都能快速有效地實現(xiàn)功能。本小節(jié)將著重覆蓋關(guān)于使用.NET開發(fā)WebService服務(wù)端和客戶端的面試題。面試103如何在.NET項目中調(diào)Web在.NETWebServiceC#中普通的方法添加一個特性,就能把這個方法定義為WebService方法,而無須做任Service。那么,如何在.NET項目中調(diào)用WebService?安裝時,asmx文件也會在IIS中被成由ASP.NET組件來處理。也就是說,一個后綴名為asmx文件和其代碼組成了一個WebService資源。在這個組合中,asmx文件只是作為一個資源文件出現(xiàn),并且WebServiceSOAP請在邏輯的處理SOAP通信的工作,.NET提供了WebService類型和WebMethod特性。在繼承自WebService類型中的公共方法上添加WebMethod特性就可以其為一個WebService方法。下面是一個具體的示例。Web站點時選擇“ASP.NETWebnamespacenamespace{//////Service1 ///</summary>[WebService(Namespace="[WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)] //若要允許使用ASP.NETAJAX 中調(diào)用此Web服務(wù),請取消對下行的注////publicclassService1:{publicstring{return}o}}VisualStudioWebServiceoWorld()WebMethodWebService方法。WebServiceWebMethodSOAP通信的工作,程序員只需致力于處理邏輯工作即可。總之,WebServiceWebMethod為程序員提SOAP處理功能,而在絕大多數(shù)情況下,程序員所要做的就是在此基礎(chǔ)上擴ASP.NETWebServiceASP.NETWebReferences上右WebService的地址,在Web名的文本框中輸入一個定義的名稱,然后單擊“添加引用”按鈕,如圖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)用,整個過程序員所添加的代碼很少,僅兩行就可以完成oWord()方法的調(diào)用。在.NETWebServiceWebMethodWebService,在ASP.NET中,可以很容易地通過添加一個新的Web、輸入其對應(yīng)的WebService地址進而完成WebService的調(diào)用。面試題 什么是異步請求WebWebWeb服務(wù)請求響應(yīng)并不是立即提供而是在最初請求事務(wù)完成后某個時候提供Web服務(wù)。這個問題主要應(yīng)聘者對WebService異步請求機制的理解及應(yīng)用。由于服務(wù)器處理速度、網(wǎng)絡(luò)傳輸速度等,會使一個WebService從請求開始致客戶端無法進行其他的動作或處理。這時候就需要異步地使用WebService。最容易被想到的方法當(dāng)然是建立一個新的線程來執(zhí)行WebService的請求并獲得結(jié)果,下面的示例參考了.NETSDKWebServiceWebService的程序。其中以下示例代碼是定義要調(diào)用的WebServices的示例,代碼如下:usingusingusingSystem.Web;usingusingSystem.Threading;namespace{//////Summarydescriptionfor///[WebService(Namespace=" [WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)] WebServices運行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從運行結(jié)果記錄的時間可以發(fā)現(xiàn),ASP.NETWebService方法是ASP.NET的線程,并沒有阻塞,這樣可以達到ASP.NET異步處理ASP.NET異步調(diào)用的方法是使用WebService的方法名+Async()作為異步調(diào)用的方法名。面試題 如何緩存WebService數(shù)在WebService開發(fā)的過,WebService的性能一直困擾著大多數(shù)程序員。針對數(shù)這個問題主要應(yīng)聘者的經(jīng)驗以及對WebService緩存機制的理解及應(yīng)用。HTTPWeb服務(wù)(XMLWebInternetWeb服務(wù)),實際上可以高如,產(chǎn)品、銷售信息、歷史財務(wù)數(shù)據(jù)以及定價數(shù)據(jù))。WebMethodBufferResponsetrueXMLWebServices方對響應(yīng)的緩沖處理,該響應(yīng)就通過網(wǎng)絡(luò)返回到XMLWebServices客戶端。當(dāng)BufferResponsefalseXMLWebServices方法的響應(yīng)在被序列化的同時被發(fā)回客注意:只有當(dāng)已知XMLWebServices方法將大量數(shù)據(jù)返回到客戶端時,才需要將BufferResponse設(shè)置false。對于少量數(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表示緩存時間為10秒[WebMethod(Description返回緩存了的服務(wù)器時間數(shù)據(jù)",BufferResponse=true,CacheDuration=10)]publicstringGetServerTime(){returnSystem.DateTime.Now.ToString();//返回當(dāng)前服務(wù)器的時}}}WebMethodBufferResponsetrueXMLWebServices方現(xiàn)了對WebService的高速緩存。面試題 WebService中的事務(wù)處理有哪事務(wù)最常用的一個場合就是數(shù)據(jù)庫,這個問題主要應(yīng)聘者WebService開發(fā)HTTP協(xié)議的無狀態(tài)特性,XMLWebServices方法只能作為根對象參與事務(wù)。如記為在事務(wù)內(nèi)運行,XMLWebServices方法就可以調(diào)用這些COM對象。如果一個TransactionOption屬性為Required或RequiresNew的XMLWebServicesXMLWebServicesXMLWebServices方法只能用作事務(wù)中的根對象。表7.6列出了TransactionOption枚舉。7.6TransactionOption枚 指示XMLWebServices方法不在事務(wù)的范圍內(nèi)運行。當(dāng)處的情況下執(zhí)行XMLWebServices方NotSupportedXMLWebServices方法不在事務(wù)的范圍內(nèi)運行。當(dāng)處理請求時,將在沒有事務(wù)的情況下執(zhí)行XMLWebServices方法SupportedXMLWebServices方法不在事務(wù)范圍內(nèi)運行。當(dāng)處理請求時,將在沒有事務(wù)的情況下創(chuàng)建XMLWebServicesXMLWebServices方法需要事務(wù)。由于XMLWebServices方法只能作為根對象參與事務(wù),因此將為XMLWebServices方法創(chuàng)建一個新事務(wù)RequiresNewXMLWebServices方法需要新事務(wù)。當(dāng)內(nèi)創(chuàng)建XMLWebusingusingusingSystem.Reflection; {…}:{…}WebService中支持5個級別的事務(wù),分別為Transaction特性中的Disabled、NotSupported、Supported、Required和RequiresNew。面試題107如何處理WebService中的異異常處理在程序的開發(fā)過必不可缺,因為調(diào)用WebService方法畢竟和調(diào)用本地方法有所區(qū)別,所以Web Service的異常處理也有所不同??梢韵胂?,如果希望捕獲Web本小節(jié)將借助回答問題,來回答WebService中的異常機制。行期間發(fā)生了異常,Web服務(wù)應(yīng)該不只是捕捉到異常,還應(yīng)該把異常傳回給Web服務(wù)的WebWeb服務(wù)中發(fā)生SOAP規(guī)范。.NETSOAPExceptionWeb服務(wù)中拋出異常,而SOAPException對象提供了一種表示SOAPFault的工業(yè)標(biāo)準(zhǔn)方法。在Web服務(wù)中處理異常與在Web或Windows應(yīng)用程序中處理異常沒有什么區(qū)別。但是,在設(shè)計Web服務(wù)中的異常塊時,必須明白一個事實,即需要以一種平臺無關(guān)的基于SOAP規(guī)范的方式把異常信息傳遞給Web服務(wù)的客戶端。為了達到這個目的,應(yīng)該使用性來設(shè)置SOAPException對象。Message:異常的內(nèi)容。 Detail:空,但Detail元素可以用于把的異常信息傳遞給調(diào)用者。依據(jù)上面的分析,筆者將SOAPException進一步封裝,代碼如下:publicpublicenum{=Server=}param paramname="errorMessage">錯誤信息paramname="errorNumber">錯誤號paramname="errorSource">錯誤源paramname="code">異常類型publicSOAPExceptionstringstringerrorNumber,stringerrorSource,FaultCodecode){XMLQualifiedNamefaultCodeLocationnull;//初始化限定switchswitch{case faultCodeLocation= casefaultCodeLocation=SOAPException.ServerFaultCode;}stringstrXMLOut=++"<ErrorNumber>"+errorNumber++"<ErrorSource>"+errorSource+++ xmlDoc=newXML //實例化SOAPExceptionSOAPExceptionsoapExnewSOAPException(errorMessage,uri, return }[WebMethod(Description[WebMethod(Description測試直接拋出異常{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ù)異常信息,可以對SOAPException進行封裝,生成便于理解的業(yè)務(wù)異常信息。WebServiceWebServiceWebService最大的一個亮點,但是隨之而來的安全問題也成為大家關(guān)注的焦點。IBM、微軟公司等大型提供商一起提出了WS-Security面試題 請列舉常見的WebService安全措WebService目前被企業(yè)所廣泛應(yīng)用。從應(yīng)用的角度來看,WebService技術(shù)的確具有個企業(yè)不得不關(guān)注的問題。本小節(jié)將介紹幾種常見的WebService安全措施。WS-Windows驗證WS-SecurityWS-Security中定用于驗證;X.509還使用現(xiàn)有的PKI進行密鑰管理;XML加密和XML簽名描述了XML消息內(nèi)容的加密和簽名方法;XML標(biāo)準(zhǔn)描述了為簽名和加密而準(zhǔn)備XML的方法。SSLWebService服務(wù)器與客戶端之間的通信擁有更高級別的安全WebService應(yīng)用,在考慮到企業(yè)自身的實力以及有限資源條件下。通常采用自定識別的方式進行簡單有效的安全措施,這種方式的好處是開發(fā)周說明:無論采用何種WebService安全方案都要注意是否具備數(shù)據(jù)的 性、用戶的驗證、用戶的、預(yù)防用戶抵賴這5個條件。一下IBM、微軟等公司的一些成功案例。本小節(jié)列舉了WS-Security、配置SSL、SOAP標(biāo)頭驗證、Windows驗證這4種常見的安全措施。面試題 在WebService中如何采用Windows驗證和WebService是一個開放的平臺,針對企業(yè)級用戶WebService的安全機制一直以來是多數(shù)公司關(guān)注的問題。本小節(jié)將主要應(yīng)聘者在Intranet環(huán)境中WebService使用經(jīng)驗。驗Windows驗證驗證就是為了證實發(fā)送方的,同樣WebService驗證的目的,也是為了一般可通過Windows驗證來保證XMLWeb服務(wù)的安全性。若需要驗證,請若要允許或特定的用戶服務(wù),請使用ASP.NET配置系統(tǒng),或在服務(wù)文件本身中ACL。示例代碼如下:<authentication<location<allow<allow <denyroles="BUILTIN\PowerXMLWebWindows用戶運行的情況。一個簡單的WebService。usingusingSystem.Web.Services;usingSystem;classSecurityService:{publicString{ 這個WebService方法}}WebService類提供兩個屬性:Username和Password??梢允褂眠@兩個屬性指定憑據(jù),并通過憑據(jù)連接到Web服務(wù),必須將它們設(shè)置成Web服務(wù)的計算機或域上的有效Windows憑據(jù)。代碼如下:<%@<%@ImportNamespace="SecurityService"<scriptlanguage="C#"publicvoidPage_Load(Objectsender,EventArgs{SecurityServicesnew 驗證方案(如基本、簡要、NTLM和 Mess
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 盾構(gòu)機采購合同范本
- Unit 1 Hello!(教學(xué)設(shè)計)-2024-2025學(xué)年冀教版(三起)(2024)英語三年級上冊
- 投資地皮合同范本
- 2《走月亮》教學(xué)設(shè)計-2024-2025學(xué)年語文四年級上冊統(tǒng)編版
- 21古詩詞三首《山居秋暝》(教學(xué)設(shè)計)-2024-2025學(xué)年統(tǒng)編版語文五年級上冊
- 3《蜀道難》《蜀相》教學(xué)設(shè)計 2023-2024學(xué)年統(tǒng)編版高中語文選擇性必修下冊
- 清油罐合同范本
- 20肥皂泡教學(xué)設(shè)計-2023-2024學(xué)年三年級下冊語文統(tǒng)編版
- 貨物抵賬合同范本
- 4公民的基本權(quán)利和義務(wù) 第三課時《國家尊重和保障人權(quán)》教學(xué)設(shè)計-2024-2025學(xué)年道德與法治六年級上冊統(tǒng)編版
- 《船舶精通急救》全套教學(xué)課件
- 什么叫績效考勤管理制度
- 外墻噴漆施工合同協(xié)議書
- 《積極心理學(xué)(第3版)》 課件 第2章 心理流暢體驗
- 軟件系統(tǒng)平臺項目實施方案
- 陜西延長石油集團礦業(yè)公司招聘筆試題庫2024
- 《力與形變》教學(xué)課件(一)
- 浙江省中小學(xué)心理健康教育課程標(biāo)準(zhǔn)
- 遼寧省大連市莊河市2023-2024學(xué)年七年級下學(xué)期期末數(shù)學(xué)試題
- 壘球教案完整版本
- 2024年南京鐵道職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性測試題庫附答案
評論
0/150
提交評論