WCF的学习记录
學(xué)習(xí)了一段時(shí)間的WCF,也抄了些例子,但是發(fā)現(xiàn)就這樣的話還是有些模糊,從今天開始把自己看過(guò)的一些東西重新整理一下,理一下思路。
WCF是基于SOA編程的一套架構(gòu)。它集成了.net service,Remotting,消息隊(duì)列和Enterprise Service等技術(shù)。實(shí)現(xiàn)了跨平臺(tái),跨系統(tǒng),跨本地網(wǎng)絡(luò)和internet的操作。目的是收發(fā)從客戶機(jī)到服務(wù)的消息。
(1)消息隊(duì)列(MSMQ)可以創(chuàng)建消息隊(duì)列,使進(jìn)程之間互相通信而忽略掉通信雙方。通信各方只是單純的向消息隊(duì)列中存放消息和從消息隊(duì)列中取出消息,進(jìn)而在沒有聯(lián)網(wǎng)的情況下也可以實(shí)現(xiàn)消息的交換。
(2)web service 發(fā)布于uri的一套應(yīng)用程序,向外界暴露一個(gè)用于調(diào)用的API?;趚ml,xsd,soap,uddi的開發(fā)手段。
(3).net remotting:跨越應(yīng)用程序池實(shí)現(xiàn)進(jìn)程間對(duì)象訪問的機(jī)制。remoting基于通道(TCP和HTTP),獲得服務(wù)端對(duì)象,然后通過(guò)proxy解析為本地客戶端對(duì)象。通過(guò)通道創(chuàng)建客戶端對(duì)象成為激活,remoting有兩種激活方式,服務(wù)端激活和客戶端激活。服務(wù)端激活又包括sigleton和sigleCall模式。
(4)soap?,F(xiàn)在的soap是一個(gè)XML表示的消息體。包含封套,封套包含標(biāo)題和消息體。
(5)WSDL webservice description language ,描述服務(wù)的操作和消息。
(6)JSON Javescript object notation 。適用于ajax客戶機(jī)。
?
上面列出了一些WCF的附屬技術(shù)。下面來(lái)看下WCF的幾大要素:
《1》 合同 contract
??????? contract 分為三種,一種為data contract 一種是 service contract 一種是message contract。他們定義了服務(wù)提供的功能和客戶端程序可以使用的功能。contract完全獨(dú)立于服務(wù)的實(shí)現(xiàn)代碼。
??????? 1,data contract 定義了服務(wù)中傳輸和接受的數(shù)據(jù)??梢允且粋€(gè)類。
?????????? data contract 最好定義一個(gè)namespace,因?yàn)閐ata contract 存在一個(gè)版本問題,如果添加一個(gè)可選成員,則不會(huì)破壞版本。如果增加或者刪除了需要字段,則contract會(huì)被破壞。
??????? 2,service contract 定義描述了服務(wù)的WSDL,用接口或類定義。
??????? 3,message contract 如果需要完全控制soap,可以使用message contract,它可以指定哪些部分放在soap標(biāo)題中,哪些放到body中。
《2》服務(wù)的實(shí)現(xiàn) 標(biāo)記為[seveice behavior]?? sessionMode.Requirst?? InstanceContextMode.Persession
??????1, 如果需要會(huì)話的話,則不能使用basicHttpBinding 。
????? 2,客戶端使用實(shí)現(xiàn)的服務(wù)可以使用兩種方式;一種是webservice的引用,另一種是使用ChannelFactory<Tchannel>.CreatChannel實(shí)例化連接服務(wù)的信道。
????? 3,錯(cuò)誤處理,可以寫一個(gè)錯(cuò)誤類[data contract] 定義錯(cuò)誤數(shù)據(jù)類,使用[Fault contract]屬性
《3》綁定 服務(wù)的通信方式 常用的有basicHttpBinding? WSHttpBinding,WebHttpBinding,NetTcpBinding........
?????? endpoint : address(uri)? contract? binding .
《4》主機(jī) host 即運(yùn)行服務(wù)的主機(jī),可以是windows服務(wù),可以是com+應(yīng)用,可以是WAS和IIS,wuindows應(yīng)用程序,或簡(jiǎn)單控制臺(tái)程序。
??????? 1,定制主機(jī)? 使用ServiceHost實(shí)例,讀取配置文件,定義綁定。然后open開接受調(diào)用,注意一點(diǎn),主線程推出前需close掉host。查看host屬性可使用communicationState。
??????? 2,WAS主機(jī),可以自動(dòng)激活服務(wù),健康監(jiān)控和循環(huán)處理。使用WAS主機(jī),需要?jiǎng)?chuàng)建一個(gè)web站點(diǎn)和.SVS文件。
《5》客戶程序:客戶應(yīng)用程序需要使用代理來(lái)訪問服務(wù),創(chuàng)建代理有三種方法,一是添加web應(yīng)用。二是使用Svcutil.exe工具創(chuàng)建。三是使用channelFactory類。
?《6》雙向通信 使用callback實(shí)現(xiàn)服務(wù)器回調(diào)客戶端代碼,實(shí)現(xiàn)雙向通信。
??????? 1,使用isoneway=true 保證服務(wù)不必等待方法在客戶程序上成功調(diào)用。
????????2,為了避免出現(xiàn)死鎖現(xiàn)象,使用concurrentcyMode.multiple或ConcuurentcyMode.Reentrant。訪問callback contract 要使用OperationContext訪問會(huì)話信息、消息標(biāo)題和屬性。在雙向通信時(shí)還可以訪問回調(diào)信道。通過(guò)泛型方法GetCallBackChannel()將信道返回客戶實(shí)例,調(diào)用callback實(shí)現(xiàn)方法。
??????? 3,在雙向通信中要使用DuplexChannelFactory類。這個(gè)類接收三個(gè)參數(shù),分別是綁定,uri和封裝了ClientCallBack類的一個(gè)InstanceContext類。
轉(zhuǎn)載于:https://www.cnblogs.com/zhaoyun2007/archive/2010/05/26/1743759.html
總結(jié)
- 上一篇: ASP.NET多语言网页设计
- 下一篇: 关于java.nio.Buffer的AP