WCF(学习笔记)【参见WCF教程】
?WCF:基于SOA(面向服務(wù)編程 )的一個(gè).net框架產(chǎn)品 ? 一種分布式通訊的統(tǒng)一模型(分布式通訊就是對多種 操作系統(tǒng)和平臺(tái)的的兼容) 通信范圍比較廣
? Web service???????????? .net Remoting
其他?????????? WCF????? 其他
?? 定義一個(gè)wcf服務(wù)后? 它會(huì)對外發(fā)布一個(gè)
? 端點(diǎn)? 協(xié)議? 綁定
?
? 宿主程序:asp.net? exe? wpf?? window? forms......
WCF可以支持的協(xié)議:TCP? HTTP? 跨進(jìn)程?? 自定義協(xié)議
?在WCF框架下? 開發(fā)基于SOA的分布式系統(tǒng)
??? .net Remoting? :能夠高性能的實(shí)現(xiàn).net 和.NET之間的通訊?? 受語言限制, ??? Web Service:基于SOAP(協(xié)議), 可以跨平臺(tái)調(diào)用:
????? ? WCF 是面向服務(wù)的產(chǎn)品 ,
?那么WCF也是基于SOAP的通訊機(jī)制 ,這保證了系統(tǒng)之間的互操作性
?
???????? WCF最重要的是能夠快捷的額創(chuàng)建一個(gè)服務(wù), ?? WCF 包括三部分:
?1,Service Class :一個(gè)標(biāo)記了[ServiceContract]Attribute的類[契約標(biāo)簽]
?? [ServiceContract]? [OperationConstract] 服務(wù)契約
?? [DataContract]? [DataMember]? 數(shù)據(jù)契約
?2,Host(宿主):可以使應(yīng)用程序? 它是WCF Service運(yùn)行的環(huán)境
?也就是說? 服務(wù)器上(的程序)
?
?3,Endpoints:可以使一個(gè) 也可以是一組? wcf實(shí)現(xiàn)通訊的核心要素
?WCF 由一組Endpoints集合組成? 每個(gè)endpoint就是用于通信的入口?
? 客 服 通過endpoint交換信息
??
??? 一個(gè)endpoint(端點(diǎn)) 由三部分組成? : ? ?? (where)address(地址):是endpoint的網(wǎng)絡(luò)地址 它標(biāo)記了消息發(fā)送的目的地?
? ?(what)? contract (契約):描述消息包含的內(nèi)容? 以及消息的組織和操作方式
? (how) Binding? (綁定):描述如何發(fā)送消息? ,例如消息發(fā)送的傳輸協(xié)議(如TCP,HTTP) ?安全(如ssl,soap消息安全)?
? opration操作
?
????? 那么WCF是怎樣通訊的呢????
? WCF管理的是服務(wù)端和客戶端的通信??
?? 對于服務(wù)端? WCF提供了類ServiceDescription用于描述一個(gè)WCF Service
?? 對于客戶端? WCF管理的是發(fā)送消息 時(shí) 需要使用到得通道Channel, ?????? 類channelDescription描述了這樣一個(gè)通道
ServiceDescription ????????? Service Type ????????? ISerciceBehavor ?????????? ServiceEndpoint ???????????????? EndpointAddress ???????????????? Binding ???????????????? ContractDescription
?
?
?????????? 下面要寫一個(gè)wcf的程序 ?首先要添加引用? system.ServiceModel
一般我們要定義wcf服務(wù)時(shí) 先把一個(gè)接口定義為一個(gè)服務(wù) ?這樣為了更好的面向?qū)ο?#xff08;服務(wù))編程 ? 在接口中添加[ServiceContract] [OperationContract] [DataContract] [DataMember]
在實(shí)現(xiàn)接口類中就不需要 在添加標(biāo)簽啦 ? ????????
?? 接下來:一個(gè)WCF Service 必須有host作為它的運(yùn)行環(huán)境 ,這個(gè)host可以是
? ASP.NET? Windows Service? 不通的應(yīng)用程序? 例如控制臺(tái)程序
??? host實(shí)現(xiàn)
?????????? using System.ServiceModel
??????????? //創(chuàng)建一個(gè)SerciceHost對象?? 參數(shù)(服務(wù)實(shí)現(xiàn)類的類型typeof,url對象)
?? ServiceHost host =new ServiceHost(typeof(MyMethod),new Url("http://localhost:8080/HelloService"));
?
?
?
?
?
新建兩個(gè)項(xiàng)目 ?一:wcf服務(wù)應(yīng)用程序 服務(wù)端 二:控制臺(tái)?? 客戶端
?
?服務(wù)端:接口? 服務(wù)契約:標(biāo)簽
1,ServiceContract??? 聲明接口或類在客戶端可見? 2,OperationContract?? 聲明具體的方法在客戶端可見
?? 數(shù)據(jù)契約:標(biāo)簽
1,DataContract??? 把某個(gè)類或結(jié)構(gòu)聲明為數(shù)據(jù)契約? ,這個(gè)類就可以再客戶端可見并可用來聲明變量
2, DataMember????? 把服務(wù)端類中的變量? 字段 標(biāo)記為在客戶端可見
??
???????? 客戶端:
?在客戶端 控制臺(tái)程序中????? 添加服務(wù)引用?
?? 在? 發(fā)現(xiàn) 中會(huì)去尋找可用的服務(wù)
?在最下面會(huì)有服務(wù)引用的命名空間? ServiceReference1
?
?????? 在客戶端調(diào)用服務(wù)? ? 1,定義通信管道 client? 就是通過它來調(diào)用服務(wù)端提供的方法的
?? ServiceReference1.ServiclClient? client =new ServiceReference1.ServiclClient ();
?? ?client.studentlClass();
2,服務(wù)端提供給客戶端使用的類
? ServiceReference1.student1(服務(wù)端的類) stu==
?
?
?? 問題:
?? 1,要想在客戶端使用服務(wù)端里自定義的類型,除了用 [DataContract]聲明之外 還要有一個(gè)服務(wù)契約(方法)[OperationContract]的返回值是這個(gè)類型的。 ?? 2,在接口類中(對客戶端開發(fā)并可以調(diào)用的類型),在接口該類中,定義一個(gè)字段并賦默認(rèn)值
? 定義一個(gè)屬性并給它賦默認(rèn)值?
?? 那么在客戶端調(diào)用時(shí)? 輸出該類中的屬性值?
?? 為空????? 默認(rèn)值丟失???????
?序列化的問題?????? ? ??
總結(jié)
以上是生活随笔為你收集整理的WCF(学习笔记)【参见WCF教程】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ResNet Keras实现
- 下一篇: 在VS2010下运行Qt程序