WCF behavior不同級(jí)別及類型總結(jié)
對(duì)于大多數(shù)開(kāi)發(fā)人員來(lái)說(shuō),掌握一個(gè)開(kāi)發(fā)工具的應(yīng)用是一件非常重要的事情。那么WCF的出現(xiàn),對(duì)開(kāi)發(fā)人員來(lái)說(shuō)又多了一個(gè)不錯(cuò)的選擇。在這里我們先來(lái)為大家介紹一下WCF behavior的相關(guān)內(nèi)容。WCF behavior,說(shuō)白了,就是內(nèi)部的附加操作。在效果上,有點(diǎn)像ASP.NET中的HttpModule和HttpHandle(實(shí)現(xiàn)原理當(dāng)然不一樣了)。#t#
在上面的例子中,我們?yōu)镾ervice添加了附加的操作,就是在調(diào)用契約方法之前,把從Client傳來(lái)的參數(shù)+1。我們還可以在Client端也添加類似的行為,我會(huì)在下一章中給出這個(gè)例子。
behavior在Service和Client分別有不同的類型:
在Service中,這些類型都存放在System.ServiceModel.Dispatcher命名空間下。
在Client中,這些類型都存放在System.ServiceModel.Channels命名空間下。
此外,可以在3個(gè)級(jí)別定義WCF behavior:
1.Contract級(jí)別,顧名思義,把行為加諸于接口(契約)之上,如下所示,也就是MyContractBehavior這個(gè)Attribute:
- [MyContractBehavior]
- [ServiceContract]
- public interface ISimple
- {
- [OperationContract(IsOneWay=true)]
- void AcceptRequest(string someRequest);
- }
2.Endpoint級(jí)別,把行為加在終結(jié)點(diǎn)上,還記得上一篇文章的MyParameterInspector么,下面是code形式的添加(另一種是在配置文件中添加,稍后討論):
- host.Description.Endpoints[0].Contract.Operations[0].
Behaviors.Add(new MyParameterInspector());
3.Operation級(jí)別,把行為加在操作(契約的方法)上。這個(gè)級(jí)別是***的。如下所示,IdentityValidate和IdentityCache都是自定義行為。
- [ServiceContract]
- public interface IIdentityService
- {
- [IdentityValidate]
- [IdentityCache]
- [OperationContract]
- int GetIDByName(string name);
- }
根據(jù)我們的需要,在不同級(jí)別定義WCF behavior,它們的作用域不同,像Operation級(jí)別只影響一個(gè)方法,而Endpoint級(jí)別影響到這個(gè)終結(jié)點(diǎn)的所有操作,Contract級(jí)別則影響調(diào)用該契約的所有操作。
有5種類型的WCF behavior:
ParameterInspection
MessageFormatting
OperationInvoker
MessageInspection
OperationSelector