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