




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
工業(yè)和信息化部“十二五”規(guī)劃教材
普通高等學(xué)?!笆濉币?guī)劃教材
《C#網(wǎng)絡(luò)應(yīng)用編程》第3版
第7章WCF入門2Ch7WCF入門7.1預(yù)備知識7.2WCF入門7.3WCF服務(wù)端和客戶端編程基礎(chǔ)7.4設(shè)計和實現(xiàn)協(xié)定7.5服務(wù)綁定與終結(jié)點配置7.1預(yù)備知識7.1.1XML7.1.2WebService7.1.3遠(yuǎn)程處理(RPC)7.1.4消息隊列(MSMQ)7.1.5面向服務(wù)的體系結(jié)構(gòu)(SOA)47.1.1XMLXML(ExtensibleMarkupLanguage,可擴(kuò)展的標(biāo)記語言)是一套用文本來定義語義標(biāo)記的元標(biāo)記語言,具有與平臺無關(guān)、可靈活的定義數(shù)據(jù)和結(jié)構(gòu)信息、便于網(wǎng)絡(luò)傳遞等優(yōu)勢。XML特點XML是文本編碼,因此不受所選用的操作系統(tǒng)、對象模型和編程語言的影響,可在任何網(wǎng)絡(luò)中正常傳輸。XML中的所有標(biāo)記都是自定義的,通過這些自定義的標(biāo)記,可描述某種數(shù)據(jù)的不同部分及其嵌套的層次結(jié)構(gòu)。XML規(guī)定所有標(biāo)記都必須有開始和結(jié)束標(biāo)志。57.1.2
WebServiceWebService也叫Web服務(wù),根據(jù)數(shù)據(jù)交換格式的不同,WebService又進(jìn)一步分為XMLWebService和JSONWebService等。XMLWebService是一種以XML作為數(shù)據(jù)交換格式。以JSON作為數(shù)據(jù)交換格式的Web服務(wù)稱為JSONWebService。67.1.2
WebServiceWeb服務(wù)的體系結(jié)構(gòu)基于服務(wù)提供者、服務(wù)請求者、服務(wù)注冊中心三個角色,利用發(fā)布、發(fā)現(xiàn)、綁定三個操作來構(gòu)建的。SOAP(SimpleObjectAccessProtocol) SOAP是一種基于XML的,以HTTP作為基礎(chǔ)傳輸協(xié)議的消息交換協(xié)議。SOAP定義了客戶端與Web服務(wù)交換數(shù)據(jù)的格式。WSDL(WebServiceDescriptionLanguage)
描述Web服務(wù)提供的方法以及調(diào)用這些方法的各種方式。通過WSDL,可描述Web服務(wù)的3個基本屬性:1)服務(wù)完成什么功能。即指出Web服務(wù)提供了哪些方法。2)如何訪問服務(wù)??蛻舳撕蚖eb服務(wù)交互的數(shù)據(jù)格式以及必要的協(xié)議。3)服務(wù)位于何處。指出與Web服務(wù)所用協(xié)議相關(guān)的地址,如URL、UDDI(UniversalDescription,Discovery,andIntegration)等77.1.2
WebService客戶端與Web服務(wù)通信的過程客戶端調(diào)用服務(wù)端提供的Web服務(wù)時,系統(tǒng)執(zhí)行了一系列的操作,主要過程如下。(1)客戶端應(yīng)用程序創(chuàng)建Web服務(wù)代理類的一個實例。(2)客戶端應(yīng)用程序調(diào)用代理類的方法。(3)客戶端基礎(chǔ)架構(gòu)將Web服務(wù)所需要的參數(shù)序列化為SOAP消息,并通過網(wǎng)絡(luò)將其發(fā)送給Web服務(wù)器。(4)Web服務(wù)器接收SOAP消息并反序列化該XML,同時創(chuàng)建實現(xiàn)Web服務(wù)的實例,再調(diào)用Web服務(wù)提供的方法,并將反序列化后的XML作為參數(shù)傳遞給該方法。(5)Web服務(wù)器執(zhí)行Web服務(wù)提供的方法,得到返回值和各種輸出參數(shù)。(6)Web服務(wù)器將返回值和輸出參數(shù)序列化為SOAP消息,并通過網(wǎng)絡(luò)將其返回給客戶端基礎(chǔ)架構(gòu)。(7)客戶端基礎(chǔ)架構(gòu)接收返回的SOAP消息,將XML反序列化為返回值和輸出參數(shù),并將其傳遞給代理類的實例。(8)客戶端應(yīng)用程序接收返回值和輸出參數(shù)。87.1.2
WebService客戶端與Web服務(wù)通信的過程97.1.2
WebServiceWeb服務(wù)適用的場合提供不斷更新的實時數(shù)據(jù)供其他應(yīng)用程序使用。集成現(xiàn)有的各種應(yīng)用程序。提供工作流解決方案。107.1.3遠(yuǎn)程處理(RPC)RPC(RemoteProcedureCall)——遠(yuǎn)程過程調(diào)用。遠(yuǎn)程處理技術(shù)是為了解決不同計算機(jī)上的進(jìn)程相互訪問的一種具體實現(xiàn)。.NET遠(yuǎn)程處理模型生成一個應(yīng)用程序,并讓其中兩個組件直接跨應(yīng)用程序域邊界進(jìn)行通信。此時需要生成以下內(nèi)容:一個可遠(yuǎn)程處理的對象。一個宿主應(yīng)用程序域,用于偵聽針對該對象的請求。一個客戶端應(yīng)用程序域,用于發(fā)出針對該對象的請求。117.1.4消息隊列(MSMQ)MQ(MessageQueue)是在多個不同的應(yīng)用程序之間實現(xiàn)相互通信的一種基于隊列和事務(wù)處理的異步傳輸模式。其實現(xiàn)原理是:消息發(fā)送者把要發(fā)送的信息放入一個容器中(稱為Message),然后把它保存至一個系統(tǒng)公用的消息隊列(MessageQueue)中;本地或者是異地的消息接收程序再從該隊列中取出發(fā)給它的消息進(jìn)行處理。MSMQ是微軟實現(xiàn)的MQ。127.1.5面向服務(wù)的體系結(jié)構(gòu)(SOA)SOA(Service-OrientedArchitecture,面向服務(wù)的體系結(jié)構(gòu))。其基本思想就是希望用一種統(tǒng)一的、以”服務(wù)“為中心的模型來整合各種不同的技術(shù),而不是僅僅限于Web服務(wù)。對于.NET開發(fā)人員來說,這個基于SOA的具體實現(xiàn)就是WCF。7.2WCF入門7.2.1WCF基礎(chǔ)知識7.2.2WCF體系結(jié)構(gòu)7.2.3承載WCF的方式147.2.1WCF基礎(chǔ)知識WCF是微軟公司推出的符合SOA思想的分布式應(yīng)用程序技術(shù)框架和編程模型。WCF編程模型的目標(biāo)是實現(xiàn)以下兩個實體之間的通信:WCF服務(wù)和WCF客戶端。該編程模型封裝在.NET框架的System.ServiceModel命名空間中。WCF特點以服務(wù)為中心支持多種消息交換模式支持多種傳輸協(xié)議和編碼方式支持工作流、事務(wù)以及持久性的消息處理統(tǒng)一性、安全性和可擴(kuò)展性157.2.1
WCF基礎(chǔ)知識終結(jié)點(EndPoint)終結(jié)點(EndPoint)用于確定網(wǎng)絡(luò)通信目標(biāo),用EndPoint類來實現(xiàn),在配置文件中用<endpoint>配置節(jié)來指定。對于WCF來說,終結(jié)點由地址、協(xié)定和綁定組成,三者缺一不可。其中,地址(Address)用于公開服務(wù)的位置,協(xié)定(Contract)用于公開提供的是哪種具體服務(wù)。例如:<endpointaddress="http://localhost:2338/Service1.svc"binding="basicHttpBinding"contract="WcfService.IService1"/>167.2.1
WCF基礎(chǔ)知識地址(Address)WCF中的地址用于確定終結(jié)點的位置。地址可以是URL、FTP、網(wǎng)絡(luò)路徑或本地路徑。WCF規(guī)定的地址格式為:[傳輸協(xié)議]://[位置][:端口][/服務(wù)路徑]例如::50001/MyServicehttp://localhost:8733/Design_Time_Addresses/MyServicehttp://localhost:8080/MyServiceWCF服務(wù)可以在各種不同的基礎(chǔ)網(wǎng)絡(luò)協(xié)議(例如TCP、UDP、HTTP等)之間傳輸。下面的代碼演示了客戶端通過TCP訪問WCF服務(wù)的地址格式:net.tcp://localhost:50001/MyService177.2.1
WCF基礎(chǔ)知識綁定(Bingding)WCF通過綁定來定義WCF客戶端與WCF服務(wù)通信的方式。WCF提供了多種綁定方式(BasicHttpBinding、WSHttpBingding、NetTcpBinding、NetNamedPipeBinding、NetMsmqBinding)。不論是服務(wù)端還是客戶端,一般都是在單獨的配置文件(Web.config、App.config)中配置綁定。協(xié)定(Contract)協(xié)定表示客戶端和服務(wù)端之間的信息交換規(guī)則,例如服務(wù)協(xié)定、數(shù)據(jù)協(xié)定、消息協(xié)定等。如果不指定協(xié)定,就無法在客戶端和服務(wù)端之間進(jìn)行通信。協(xié)定在接口中用Contract特性來聲明,內(nèi)部用ContractAttribute類來實現(xiàn),在配置文件中用contract指定。187.2.1
WCF基礎(chǔ)知識服務(wù)端和客戶端假設(shè)有A、B、C、D四臺計算機(jī),A、B、C三臺計算機(jī)安裝的操作系統(tǒng)都是Windows7,D計算機(jī)安裝的操作系統(tǒng)為WindowsSever2008R2。這四臺計算機(jī)上分別部署以下應(yīng)用程序,構(gòu)成一個簡單的分布式應(yīng)用系統(tǒng)。一個名為WcfA的WCF服務(wù)庫,同時部署到A、B兩臺計算機(jī)上,該服務(wù)庫通過Windows服務(wù)讓其開機(jī)自啟動WCF服務(wù)。一個名為WcfB的WCF服務(wù)應(yīng)用程序,通過IIS部署到D計算機(jī)上,該計算機(jī)是一臺Web服務(wù)器,也是開機(jī)自啟動WCF服務(wù)。一個名為WpfApp的WPF應(yīng)用程序,這是一個客戶端應(yīng)用程序,用戶可通過Web服務(wù)器提供的下載鏈接網(wǎng)頁,分別下載并安裝到A、B、C三臺計算機(jī)上。197.2.1
WCF基礎(chǔ)知識下面通過例子說明服務(wù)端、客戶端和終結(jié)點之間的區(qū)別和聯(lián)系(a)當(dāng)WcfA中的某個方法調(diào)用WcfB中的某個方法時,此時A是客戶端,D提供WCF服務(wù);反之,當(dāng)WcfB中的某個方法調(diào)用WcfA中的某個方法時,此時D是客戶端,A提供WCF服務(wù)。(b)當(dāng)A、B、C上的WpfApp調(diào)用WcfA中的某個方法時,A、B、C都是客戶端,A提供WCF服務(wù)。(c)A、B、C、D都是終結(jié)點。準(zhǔn)確來說,是WcfA、WcfB這些進(jìn)程(或線程)執(zhí)行的方法、通信對應(yīng)的IP地址、端口以及相關(guān)的協(xié)定共同構(gòu)成終結(jié)點。207.2.2
WCF體系結(jié)構(gòu)WCF體系結(jié)構(gòu)分為協(xié)定層、服務(wù)運行時層、消息傳遞層以及激活和承載層。協(xié)定層協(xié)定層用于在相互傳遞消息之前制定服務(wù)規(guī)則、數(shù)據(jù)交換規(guī)則、消息格式、安全策略、綁定的網(wǎng)絡(luò)協(xié)議,以及消息采用的數(shù)據(jù)編碼方式等服務(wù)運行時層處理在服務(wù)實際運行期間發(fā)生的行為消息傳遞層消息傳遞層描述數(shù)據(jù)的各種格式和交換模式激活和承載層負(fù)責(zé)激活或者承載WCF服務(wù)217.2.3承載WCF的方式WCF本身不能運行,只能將其“宿主”在某個可執(zhí)行程序中(.dll或者.exe)才能運行。承載WCF的方式如下利用IIS或者WAS承載WCF服務(wù)(最常用的承載方式)IIS和IISExpressIIS是微軟推出的Web應(yīng)用服務(wù)器,WCF應(yīng)用程序開發(fā)完成后,將其部署在服務(wù)器操作系統(tǒng)(例如WindowsServer2008、WindowsServer2012)的IIS中即可。WAS(WindowsProcessActivationService,Windows進(jìn)程激活服務(wù))利用WAS,不需要將程序部署到IIS中,就可以承載并自動激活WCF服務(wù),而且不需要開發(fā)人員編寫任何承載代碼。227.2.3承載WCF的方式利用Windows服務(wù)承載WCF服務(wù)Windows服務(wù)是Windows操作系統(tǒng)提供的功能,操作系統(tǒng)利用進(jìn)程控制塊來管理它,Windows服務(wù)一般都是開機(jī)自啟動的。編寫WCF服務(wù)程序時,可以利用【W(wǎng)CF服務(wù)庫】模板將WCF服務(wù)制作成單獨的DLL文件,調(diào)試程序時系統(tǒng)會自動將其宿主到WCF服務(wù)主機(jī)中來承載WCF服務(wù),并利用Windows進(jìn)程去自動激活它。自承載自承載WCF是指開發(fā)人員自己編寫代碼實現(xiàn)承載WCF的工作。自承載這種方式本質(zhì)上是利用Windows進(jìn)程激活服務(wù)來承載WCF的,但是開發(fā)人員不是直接用WCF模板來實現(xiàn)承載工作,而是利用.NET框架公開的相關(guān)類去實現(xiàn)承載WCF的工作。237.2.3承載WCF的方式自承載的優(yōu)點實現(xiàn)靈活。自承載是所有承載WCF服務(wù)的方式中最靈活的一種實現(xiàn)方式。開發(fā)人員可在程序中隨時啟動、關(guān)閉和通過代碼配置WCF服務(wù),或者通過程序提供的界面,讓用戶根據(jù)需要隨時啟動和停止服務(wù)。可以通過代碼選擇多種基礎(chǔ)傳輸協(xié)議(例如HTTP、TCP、UDP等),也可以通過代碼來配置服務(wù)。如果使用的是.NET框架4.5及更高版本,還可以完全依賴配置文件來配置。但在.NET框架4.0中,只能通過代碼來配置服務(wù)。部署自承載程序時,需要的環(huán)境支持要求最小。自承載的缺點該方案不是面向服務(wù)的企業(yè)級分布式解決方案。所有承載的實現(xiàn)代碼都需要程序員自己去編寫。比如需要程序員自己去處理網(wǎng)絡(luò)監(jiān)視和避免網(wǎng)絡(luò)攻擊等。7.3WCF服務(wù)端和客戶端編程基礎(chǔ)7.3.1WCF服務(wù)器端編程模型7.3.2WCF客戶端編程模型7.3.3編寫服務(wù)端和客戶端程序的基本思路257.3.1WCF服務(wù)器端編程模型VS2012內(nèi)置了各種編寫WCF服務(wù)的模板,開發(fā)人員直接利用它就可以快速實現(xiàn)WCF服務(wù)端提供的服務(wù)代碼。WCF服務(wù)應(yīng)用程序該模板利用IIS自帶的WAS承載和激活WCF服務(wù)系統(tǒng)會自動運行WCF測試客戶端(WcfTestClient.exe)同一個解決方案中既包括WCF服務(wù)應(yīng)用程序項目又包括WCF客戶端項目時,運行客戶端程序時,該模板會利用WAS自動承載并激活WCF服務(wù)。WCF服務(wù)庫該模板是利用WCF服務(wù)(WcfSvcHost.exe)承載并激活WCF服務(wù)。系統(tǒng)會自動運行WCF測試客戶端(WcfTestClient.exe)僅適用于需要長時間(開機(jī)運行)WCF服務(wù)的場合
其他模板【W(wǎng)CF工作流服務(wù)】模板、【W(wǎng)CF聯(lián)合服務(wù)庫】模板267.3.1WCF服務(wù)器端編程模型編寫WCF服務(wù)端程序有4個主要步驟:選擇承載方式、設(shè)計和實現(xiàn)協(xié)定、配置服務(wù)、承載服務(wù)。選擇承載方式編寫HTTP應(yīng)用程序時,一般選擇【W(wǎng)CF服務(wù)應(yīng)用程序】模板編寫TCP應(yīng)用程序時,既可以選擇自承載方式,也可以選擇【W(wǎng)CF服務(wù)應(yīng)用程序】模板。編寫UDP應(yīng)用程序時,既可以用自承載方式,也可以用標(biāo)準(zhǔn)綁定。277.3.1WCF服務(wù)器端編程模型設(shè)計和實現(xiàn)協(xié)定的方式第1種方式是用一個接口公開多個方法,再用一個類實現(xiàn)接口中聲明的所有方法,這是建議的做法。優(yōu)點是可以用接口實現(xiàn)多繼承,另外,當(dāng)修改接口的實現(xiàn)時,只要接口聲明不變,就不需要客戶端做任何改動。還有,如果升級了版本,而且希望保存原來的接口實現(xiàn),只需要在接口中增加新的方法聲明即可。第2種方式是不使用接口,而是全部用類來實現(xiàn)。優(yōu)點是簡單、直觀缺點是由于托管類不支持多繼承,因此每個類只能實現(xiàn)一個服務(wù)協(xié)定,或者說有多少個類就不得不公開多少個服務(wù)協(xié)定。另外,采用這種方式時,服務(wù)端修改了任何一行代碼,客戶端代碼也必須做相應(yīng)修改,否則調(diào)用就可能失敗,在實際項目中用起來非常不方便。
287.3.1WCF服務(wù)器端編程模型配置服務(wù)通過修改配置文件(Web.config或者App.config)(建議的方式)優(yōu)點是部署服務(wù)端應(yīng)用程序時,不需要修改源程序,只需要修改配置文件即可。開發(fā)人員自己編寫代碼承載服務(wù)服務(wù)端設(shè)計完成后,運行(承載)服務(wù)即可,此時客戶端就可以和服務(wù)端交互了297.3.2
WCF客戶端編程模型編寫WCF客戶端應(yīng)用程序時,可使用多種應(yīng)用程序編程模型。WPF應(yīng)用程序適用于開發(fā)實際的基于C/S模式的WCF客戶端應(yīng)用程序的場合??刂婆_應(yīng)用程序在實際應(yīng)用中,一般不會用它來實現(xiàn)。其他應(yīng)用程序WinForm應(yīng)用程序Windows應(yīng)用商店應(yīng)用程序(僅適用于Windows8操作系統(tǒng))ASP.NETSilverlight307.3.2
WCF客戶端編程模型編寫WCF客戶端程序的主要步驟如下利用服務(wù)端配置生成客戶端代理類和客戶端配置運行WCF服務(wù)后,客戶端可通過【添加服務(wù)引用】的辦法,讓系統(tǒng)自動生成客戶端代理類,此時它會根據(jù)服務(wù)端配置(Web.config或者App.config)自動修改客戶端配置(App.config)編寫客戶端代碼客戶端添加服務(wù)引用后,即可利用自動生成的客戶端代理類,編寫代碼與WCF交互。更新客戶端配置如果服務(wù)端配置文件(Web.config或者App.config)發(fā)生了改變,或者接口發(fā)生了改變,此時需要在客戶端更新服務(wù)引用,以便讓系統(tǒng)重新生成新的客戶端配置(App.config)317.3.3編寫服務(wù)端和客戶端程序的基本思路編寫WCF程序的基本步驟如下。創(chuàng)建服務(wù)端項目和客戶端項目編寫服務(wù)端代碼修改服務(wù)端配置測試服務(wù)(可選)在客戶端添加服務(wù)引用編寫客戶端調(diào)用代碼更新服務(wù)引用(可選)【例7-1】通過服務(wù)協(xié)定演示創(chuàng)建和調(diào)用WCF的基本設(shè)計步驟。7.4設(shè)計和實現(xiàn)協(xié)定7.4.1
協(xié)定和特性7.4.2服務(wù)協(xié)定7.4.3數(shù)據(jù)協(xié)定7.4.4消息協(xié)定337.4.1
協(xié)定和特性協(xié)定:WCF在互相傳遞消息之前預(yù)先制定的數(shù)據(jù)交換規(guī)則,以便交換數(shù)據(jù)的雙方能彼此理解對方發(fā)送的數(shù)據(jù)及其格式碼。特性:用來聲明服務(wù)端定義的所有協(xié)定。在C#中,所有特性類都是從Attribute類繼承而來的,而且其名稱都有Attribute后綴。用C#編寫代碼時,一律用中括號來聲明特性類,聲明時省略Attribute后綴,這是建議的用法。特性類的用途是為緊跟在它后面的目標(biāo)元素提供設(shè)計行為。比如對某個字段聲明了某個特性,則該特性的目標(biāo)元素就是這個字段。目標(biāo)元素可以是程序集、類、構(gòu)造函數(shù)、委托、枚舉、事件、字段、接口、方法、可移植模塊、參數(shù)、屬性(Property)、返回值以及結(jié)構(gòu)等。另外,目標(biāo)元素還可以是其他特性類。347.4.1
協(xié)定和特性例如:[ServiceContract]publicinterfaceIService1{[OperationContract]doubleAdd(doublen1,doublen2);}這段代碼對IService1接口用ServiceContract特性聲明了服務(wù)協(xié)定,對Add方法用OperationContract特性聲明了操作協(xié)定。編譯器編譯這段代碼時,遇到ServiceContract特性聲明,它就會自動創(chuàng)建ServiceContractAttribute類的一個實例,并通過該實例處理IService1接口。357.4.2服務(wù)協(xié)定服務(wù)協(xié)定:服務(wù)協(xié)定是指WCF對客戶端公開哪些服務(wù)。WCF服務(wù)端通過服務(wù)協(xié)定向客戶端公開以下內(nèi)容:操作方法、消息交換模式、采用的通信協(xié)議以及序列化格式。服務(wù)協(xié)定包括ServiceContract特性和OperationContract特性。ServiceContract特性用于在應(yīng)用程序中定義服務(wù)協(xié)定。OperationContract特性用于在應(yīng)用程序中定義操作協(xié)定。367.4.2服務(wù)協(xié)定ServiceContract特性常用屬性CallbackContract:獲取或設(shè)置雙工通信的回調(diào)協(xié)定類型,默認(rèn)為null。Name和Namespace:獲取或設(shè)置Web服務(wù)描述語言(WSDL)中<portType>元素的名稱和命名空間。HasProtectionLevel:獲取一個bool類型的值,該值指示是否對成員分配了保護(hù)級別。如果分配了保護(hù)級別(非None)則為true,否則為false。ProtectionLevel:設(shè)置綁定支持的保護(hù)級別,默認(rèn)值為ProtectionLevel.None。可選擇的值有:EncryptAndSign(對數(shù)據(jù)進(jìn)行加密和簽名確保所傳輸數(shù)據(jù)的保密性和完整性)、None(僅身份驗證)、Sign(對數(shù)據(jù)簽名確保所傳輸數(shù)據(jù)的完整性)SessionMode:獲取或設(shè)置采用的會話模式。377.4.2服務(wù)協(xié)定OperationContract特性常用屬性IsOneWay:獲取或設(shè)置是否不應(yīng)答消息,默認(rèn)為false(返回應(yīng)答的消息)。IsInitiating:獲取或設(shè)置一個布爾值,該值指示接口中的方法是否在服務(wù)端啟動會話時就可以實現(xiàn)操作,默認(rèn)為true。基本用法在接口的前面用ServiceContract特性聲明服務(wù)協(xié)定,在接口的內(nèi)部用操作協(xié)定公開操作方法。例如:[ServiceContract(Namespace="WcfServiceExamples")]publicinterfaceIService1{[OperationContract]doubleAdd(doublen1,doublen2);[OperationContract]doubleDivide(doublen1,doublen2);}387.4.3數(shù)據(jù)協(xié)定數(shù)據(jù)協(xié)定:數(shù)據(jù)協(xié)定是服務(wù)端與客戶端之間交換數(shù)據(jù)的約定,即用某種抽象方式描述要交換的數(shù)據(jù)并將其傳輸?shù)娇蛻舳?。?shù)據(jù)協(xié)定默認(rèn)采用XML格式。通過數(shù)據(jù)協(xié)定,客戶端和服務(wù)端不必共享相同的類型,而只需共享相同的數(shù)據(jù)協(xié)定即可。數(shù)據(jù)協(xié)定利用DataContract特性和DataMember特性聲明。DataContract特性定義那些類可以被序列化DataMember特性用于聲明類中的哪些成員可被序列化397.4.3數(shù)據(jù)協(xié)定數(shù)據(jù)協(xié)定的基本用法顯式聲明數(shù)據(jù)協(xié)定和成員協(xié)定:對于顯式聲明DataContract特性和DataMember特性的成員進(jìn)行序列化。[DataContract]publicclassMyData1{//不論是private還是public,只要聲明Datamember就可以序列化publicstringMyName1="me1";//未聲明Datamember,無法序列化[DataMember]publicstringMyName2="me2";//可序列化[DataMember]privatestringmyName3="me3";//可序列化[DataMember]publicintAge{get;set;}//可序列化[DataMember]publicList<Student>MyStudents{get;set;}//序列化為數(shù)組privatestringtelephone="null";//無法序列化[DataMember]publicstringTelephone//可序列化{get{returntelephone;}set{telephone=value;}}}407.4.3數(shù)據(jù)協(xié)定隱式聲明數(shù)據(jù)協(xié)定和成員協(xié)定:WCF會自動對具有public修飾符的類、結(jié)構(gòu)、枚舉等應(yīng)用數(shù)據(jù)協(xié)定,對具有public修飾符的字段和同時具有g(shù)et和set的屬性應(yīng)用成員協(xié)定publicclassStudent{//同時具有g(shù)et和set并且聲明為public的屬性默認(rèn)都擁有成員協(xié)定publicintID{get;set;}publicstringName{get;set;}publicintScore{get;set;}publicstringOtherInfo{get;set;}publicStudent(){ID=0;Name="張三";Score=50;OtherInfo="無其他信息";}publicoverridestringToString(){returnstring.Format("學(xué)號:{0},姓名:{1},成績:{2},{3}",ID,Name,Score,OtherInfo);}}417.4.3數(shù)據(jù)協(xié)定注意問題屬性的限制將DataMember特性應(yīng)用于屬性時,該屬性必須同時具有g(shù)et和set用隱式聲明時,凡是具有public修飾符的字段,都應(yīng)該用屬性來表示。如果直接用public修飾符的字段來表示,必須使用顯式聲明構(gòu)造函數(shù)的處理不要在客戶端直接創(chuàng)建服務(wù)端提供的類的實例,而是通過客戶端代理類來調(diào)用靜態(tài)成員的處理只能將DataMember特性應(yīng)用于字段和屬性?!纠?-2】演示數(shù)據(jù)協(xié)定的基本用法427.4.4消息協(xié)定消息協(xié)定:在有些情況下,需要用單個類型來表示整個消息。使用消息協(xié)定可以避免在XML序列化時產(chǎn)生不必要的包裝。通過MessageContract特性(MessageContractAttribute類)來實現(xiàn)。MessageHeader特性和MessageBodyMember特性。在消息協(xié)定的內(nèi)部,通過MessageHeader特性(MessageHeaderAttribute類)指定消息頭,通過MessageBodyMember特性(MessageBodyMemberAttribute類)指定消息體??梢詫λ凶侄?、屬性和事件應(yīng)用MessageHeader特性和MessageBodyMember特性,而與這些字段、屬性和事件的訪問修飾符無關(guān),即不論是public、private、protected還是internal,都能使用這兩個特性。437.4.4消息協(xié)定以RPC樣式對消息進(jìn)行操作。WCF通過遠(yuǎn)程過程調(diào)用(RPC)對消息協(xié)定進(jìn)行操作,這種操作稱為RPC樣式的操作,這是建議的做法。在RPC樣式的操作中,消息協(xié)定中操作協(xié)定的聲明辦法和服務(wù)協(xié)定中操作協(xié)定的聲明辦法完全相同,也就是說,都可以使用多個參數(shù),包括帶ref和out的參數(shù)?!纠?-3】演示消息協(xié)定的基本用法。447.4.4消息協(xié)定以Message樣式對消息進(jìn)行操作。對于以下情況,用Message樣式對消息進(jìn)行操作,而不用RPC樣式。需要插入自定義的SOAP標(biāo)頭。希望分別定義消息頭和正文的安全屬性(例如使用與默認(rèn)安全級別不同的數(shù)字簽名和加密保護(hù)等)。有些第三方的SOAP要求以特定的格式發(fā)送郵件。使用消息樣式時,接口中的操作方法只允許最多有一個參數(shù)和一個返回值,而且參數(shù)和返回值的類型都必須是消息類型。7.5服務(wù)綁定與終結(jié)點配置7.5.1
在服務(wù)端配置文件中配置WCF服務(wù)7.5.2
終結(jié)點綁定方式7.5.3需要綁定的元素及其含義467.5.1在服務(wù)端配置文件中配置WCF服務(wù)用【W(wǎng)CF服務(wù)應(yīng)用程序】模板創(chuàng)建WCF服務(wù)項目時,服務(wù)端配置信息保存在項目的Web.config文件中,客戶端應(yīng)用程序中的配置信息保存在項目的App.config文件中。用自承載WCF創(chuàng)建WCF服務(wù)項目時,或者用【W(wǎng)CF服務(wù)庫】模板創(chuàng)建WCF服務(wù)項目時,服務(wù)端和客戶端的配置信息都保存在對應(yīng)項目的App.config文件中。對于終結(jié)點配置來說,通過配置文件(Web.config、App.config)配置終結(jié)點是建議的做法。Web.config文件的配置結(jié)構(gòu)
見課本P181。477.5.1在服務(wù)端配置文件中配置WCF服務(wù)修改配置的方式直接修改配置修改服務(wù)端配置文件最方便的辦法是直接打開并修改它Web.config中的服務(wù)綁定配置完成后,在客戶端添加服務(wù)引用時,系統(tǒng)會自動修改App.config文件中對應(yīng)的客戶端綁定配置利用配置工具修改配置在開發(fā)過程中,除了直接修改配置文件外,還可以利用配置工具(Svcutil.exe,或者叫ServiceModel元數(shù)據(jù)實用工具)配置和查看各個參數(shù)的具體值【解決方案資源管理器】中右擊Web.config文件,選擇【編輯WCF配置】命令,此時即可以通過配置窗體查看或修改各個屬性的值487.5.1在服務(wù)端配置文件中配置WCF服務(wù)497.5.2終結(jié)點綁定方式終結(jié)點綁定方式在系統(tǒng)提供的綁定中,最基本的就是basicHttpBinding。除此之外,系統(tǒng)提供的常用綁定方式還包括:wsHttpBinding、wsDualHttpBinding、netTcpBinding、udpBinding、netNamedPipeBinding、netMsmqBinding以及netPeerTcpBinding。選擇綁定時需要注意的事項必須確保始終選擇具有安全性保障的綁定basicHttpBinding默認(rèn)未啟用安全性,其他綁定默認(rèn)都已啟用了安全性。如果在實際項目仍然使用basicHttpBinding,注意部署時一定不要忘記啟用安全性。507.5.3需要綁定的元素及其含義綁定指定終結(jié)點之間通話時所使用的通信機(jī)制綁定元素有:協(xié)議通道綁定元素、傳輸通道綁定元素和消息編碼綁定元素。WCF提供了兩種類型的通道:協(xié)議通道和傳輸通道協(xié)議通道綁定元素(綁定消息處理協(xié)議)協(xié)議通道綁定元素用于確定綁定到哪種消息處理協(xié)議(WS-Security或者WS-Reliability)來確保消息的安全性和可靠性。另外,該通道還處理自定義的消息處理協(xié)議。(WS是WebService的縮寫)517.5.3需要綁定的元素及其含義安全性消息的安全性(security)是指消息的安全處理方式,即如何保護(hù)傳輸通道使其滿足安全要求在<bindings>下的<binding>節(jié)中,可使用mode特性配置消息的安全性(security),該特性的可選值包括:None:指不保護(hù)SOAP消息且不驗證客戶端的身份。Transport:在傳輸層上滿足安全要求。Message:在消息層上滿足安全要求?;旌希═ransportW
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 三年級教師線上教學(xué)總結(jié)
- 廠區(qū)電子合同范本
- 勞務(wù)磚體合同范本
- 印刷廣告標(biāo)牌合同范本
- 企業(yè)員工股合同范本
- 《韓愈短文》教案
- 合買別墅合同范本
- 《這片土地是神圣的》說課稿
- 《觀滄?!烽喿x答案及鑒賞
- 任務(wù)目標(biāo)認(rèn)購合同范例
- 2024-2025學(xué)年第二學(xué)期英語教研組工作計劃
- 山東省海洋知識競賽(初中組)考試題庫500題(含答案)
- 服務(wù)行業(yè)人力資源薪酬體系管理與優(yōu)化
- 《蔚來發(fā)展》課件
- 2024年山東商務(wù)職業(yè)學(xué)院高職單招語文歷年參考題庫含答案解析
- 醫(yī)學(xué)教育中的學(xué)習(xí)風(fēng)格與個性化教學(xué)
- GB/T 45167-2024熔模鑄鋼件、鎳合金鑄件和鈷合金鑄件表面質(zhì)量目視檢測方法
- 2023年東北公司加油站賬務(wù)人員考試題庫
- 舊樓加裝電梯施工方案
- 《鴉片戰(zhàn)爭改》課件
- 銀行網(wǎng)點裝修工程施工組織設(shè)計方案
評論
0/150
提交評論