WCF配置文件詳細(xì)解析
WCF開發(fā)工具是微軟公司開發(fā)的一款面向服務(wù)的應(yīng)用提供的分布式通信編程框架,在實(shí)際應(yīng)用中起到了非常重要的作用。今天我們將會(huì)在這篇文章中為大家詳細(xì)介紹有關(guān)WCF配置文件的相關(guān)概念。#t#
當(dāng)今的軟件系統(tǒng)開發(fā),如果沒有配置文件幾乎是不可想象的事。沒有配置文件,軟件如何按照用戶的要求對(duì)功能進(jìn)行定制?沒有配置文件,在對(duì)軟件進(jìn)行配置安裝的時(shí)候如何根據(jù)具體的硬軟件環(huán)境進(jìn)行修改?最重要的是沒有配置文件,該如何應(yīng)對(duì)軟件系統(tǒng)的可擴(kuò)展要求?不知不覺地,配置文件的編寫與管理竟然成了軟件開發(fā)的重中之重。
WCF作為分布式開發(fā)的基礎(chǔ)框架,在定義服務(wù)以及定義消費(fèi)服務(wù)的客戶端時(shí),都使用了配置文件的方法。雖然WCF也提供硬編程的方式,通過在代碼中直接設(shè)置相關(guān)對(duì)象的屬性來完成服務(wù)端與客戶端的配置,然而這種方式并不利于后期的更改。無疑,配置文件為WCF帶來了軟件開發(fā)的靈活性,它的使用也是WCF開發(fā)過程中最頻繁的。
WCF配置文件共分為兩部分:服務(wù)端配置與客戶端配置。兩者由于功能的不同,在配置文件的使用上也略有不同。
1.WCF配置文件的服務(wù)端配置
服務(wù)端的配置文件主要包括endpoint、binding、behavior的配置。一個(gè)標(biāo)準(zhǔn)的服務(wù)端配置文件所包含的主要xml配置節(jié)如下所示:
- < system.ServiceModel>
- < services>
- < service>
- < endpoint/>
- < /service>
- < /services>
- < bindings>
- < !—定義一個(gè)或多個(gè)系統(tǒng)提供的binding元素,例如< basicHttpBinding> -->
- < !—也可以是自定義的binding元素,如< customBinding>. -->
- < binding>
- < !—例如< BasicHttpBinding>元素. -->
- < /binding>
- < /bindings>
- < behaviors>
- < !—一個(gè)或多個(gè)系統(tǒng)提供的behavior元素. -->
- < behavior>
- < !—例如< throttling>元素. -->
- < /behavior>
- < /behaviors>
- < /system.ServiceModel>
1.1 < services>配置節(jié)
在< services>配置節(jié)中可以定義多個(gè)服務(wù),每一個(gè)服務(wù)都被放到< service>配置節(jié)中,WCF的宿主程序可以通過WCF配置文件找到這些定義的服務(wù)并發(fā)布這些服務(wù)。
< service>配置節(jié)包含name和behaviorConfiguration屬性。其中,name配置了實(shí)現(xiàn)Service Contract的類型名。類型名必須是完整地包含了命名空間和類型名。而behaviorConfiguration的配置值則與其后的< behaviors>配置節(jié)的內(nèi)容有關(guān)。< endpoint>是< service>配置節(jié)的主體,其中,< endpoint>配置節(jié)包含了endpoint的三個(gè)組成部分:Address、Binding和Contract。由于具體的binding配置是在< bindings>配置節(jié)中完成,因而,在< endpoint>中配置了bindingConfiguration屬性,指向具體的binding配置。如下所示:
- < services>
- < service name="BruceZhang.MyService"
behaviorConfiguration="MyBehavior">- < endpoint address=""
- binding="netTcpBinding"
- bindingConfiguration="DuplexBinding"
- contract="BruceZhang.IHello" />
- < /service>
- < /services>
我們也可以定義多個(gè)endpoint,例如:
- < services>
- < service
- name="Microsoft.ServiceModel.Samples.CalculatorService"
- behaviorConfiguration="CalculatorServiceBehavior">
- < endpoint address=""
- binding="wsHttpBinding"
- contract="Microsoft.ServiceModel.Samples.ICalculator" />
- < endpoint address="mex"
- binding="mexHttpBinding"
- contract=" Microsoft.ServiceModel.Samples.IMetadataExchange" />
- < /service>
- < /services>
如果address值為空,那么endpoint的地址就是默認(rèn)的基地址(Base Address)。例如ICalculator服務(wù)的地址就是http://localhost/servicemodelsamples/service.svc,而IMetadataExchange服務(wù)的地址則為http://localhost/servicemodelsamples/service.svc/mex。這里所謂的基地址可以在< service>中通過配置< host>來定義:
- < service
- name="Microsoft.ServiceModel.Samples.CalculatorService"
- behaviorConfiguration="CalculatorServiceBehavior">
- < host>
- < baseAddresses>
- < add baseAddress=
- "http://localhost/ServiceModelSamples/service.svc"/>
- < /baseAddresses>
- < /host>
- < endpoint … />
- < /service>
1.2 < behaviors>配置節(jié)
當(dāng)我們?cè)诙x一個(gè)實(shí)現(xiàn)了Service Contract的類時(shí), binding和address信息是客戶端必須知道的,否則無法調(diào)用該服務(wù)。然而,如果需要指定服務(wù)在執(zhí)行方面的相關(guān)特性時(shí),就必須定義服務(wù)的behavior。在WCF中,定義behavior就可以設(shè)置服務(wù)的運(yùn)行時(shí)屬性,甚至于通過自定義behavior插入一些自定義類型。例如通過指定ServiceMetadataBehavior,可以使WCF服務(wù)對(duì)外公布Metadata。配置如下:
- < behaviors>
- < serviceBehaviors>
- < behavior name="metadataSupport">
- < serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
- < /behavior>
- < serviceBehaviors>
- < behaviors>
在WCF中,behavior被定義為Attribute,其中,System.ServiceModel.ServiceBehaviorAttribute和System.ServiceModel.OperationBehaviorAttribute是最常用的behavior。雖然,behavior作為Attribute可以通過編程的方式直接施加到服務(wù)上,但出于靈活性的考慮,將behavior定義到WCF配置文件中才是***的設(shè)計(jì)方式。
利用ServiceBehavior與OperationBehavior可以控制服務(wù)的如下屬性:
- 1、 對(duì)象實(shí)例的生命周期;
- 2、 并發(fā)與異步處理;
- 3、 配置行為;
- 4、 事務(wù)行為;
- 5、 序列化行為;
- 6、 元數(shù)據(jù)轉(zhuǎn)換;
- 7、 會(huì)話的生命周期;
- 8、 地址過濾以及消息頭的處理;
- 9、 模擬(Impersonation);
例如,通過ServiceBehavior設(shè)置對(duì)象實(shí)例的生命周期:
- < behaviors>
- < serviceBehaviors>
- < behavior name="metadataSupport">
- < instanceContextMode httpGetEnabled="true" httpGetUrl=""/>
- < /behavior>
- < serviceBehaviors>
- < behaviors>
以上就是對(duì)WCF配置文件的詳細(xì)介紹。