成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

WCF使用Header如何正確實現

開發 開發工具
我們如果想在WCF中使用自定義的Header的話,應該如何進行正確的操作呢?在這里大家就可以充分的掌握到WCF使用Header的相關技巧。

對于一個經驗豐富的編程人員來說,它不可能不知道WCF為何物。作為一個.NET Framework 3.5的重要組成部件,為我們帶來了非常大的好處。我們在這里先來了解一下WCF使用Header的相關應用技巧。

在WCF中如何實現登陸,典型的場景如下:

 

 

 

  1. [ServiceContract]  
  2. public interface ILogin {  
  3. [OperationContract]  
  4. bool Signin(string userName, string password);  
  5. }  
  6. [ServiceContract]  
  7. public interface IBizTest {  
  8. [OperationContract]  
  9. string GetWelcomeInfo();  

 

千萬別從WCF自帶的那個InstanceContextMode來想辦法,因為WCF中的PerSession調用只是針對每個服務類而言的,除非你變態到服務端只有一個類來實現全部的接口;#t#

變個思路,能不能用類似.NET Remoting中的CallContext呢?但是查了一下WCF的手冊,好像也沒有這么個東西,怎么解決呢?那就是Custom header.

解決方案提出前,需要知道一點的就是,服務端取客戶端送出的Header的方法:

先遍歷OperationContext.Current.IncomingMessageHeaders找出客戶端發送的Header Name,然后再用 OperationContext.Current.IncomingMessageHeaders.GetHeader<T>(i)得到值就可以啦。

下面的問題就剩下客戶端怎么發送Custom Header了。

策略1:在每個客戶端Proxy中增加類似如下的代碼

 

  1. using (OperationContextScope scope = new 
    OperationContextScope(InnerChannel)) {  
  2. MessageHeader mh = MessageHeader.CreateHeader("HeaderName", 
    string.Empty, "HeaderValue");  
  3. OperationContext.Current.OutgoingMessageHeaders.Add(mh);  
  4. //…  
  5. }  
  6.  

 

 

但是每個客戶端都要增加,這樣的WCF使用Header的步驟太麻煩了,所以,引出

2.自定義一個CallContextAttribute,代碼如下:

1. 先定義一個IClientMessageInspector接口的實現類

  1. public class ContextHeader : IClientMessageInspector {  
  2. public void AfterReceiveReply(ref System.ServiceModel.
    Channels.Message reply, object correlationState) {  
  3. //  
  4. }  
  5. public object BeforeSendRequest(ref System.ServiceModel.
    Channels.Message request, IClientChannel channel) {  
  6. MessageHeader clientHeader = MessageHeader.CreateHeader
    ("headerName", string.Empty, "headerValue");  
  7. request.Headers.Add(clientHeader);  
  8. return null;  
  9. }  

 

 

OK , 然后就可以實現CallContextAttribute了

  1. public class CallContextAttribute : Attribute, IEndpointBehavior,
     IOperationBehavior {  
  2. IEndpointBehavior Members#region IEndpointBehavior Members  
  3. public void AddBindingParameters(ServiceEndpoint endpoint, 
    BindingParameterCollection bindingParameters) {  
  4. }  
  5. public void ApplyClientBehavior(ServiceEndpoint endpoint, 
    ClientRuntime clientRuntime) {  
  6. clientRuntime.MessageInspectors.Add(new ContextHeader());  
  7. }  
  8. public void ApplyDispatchBehavior(ServiceEndpoint endpoint, 
    EndpointDispatcher endpointDispatcher) {  
  9. }  
  10. public void Validate(ServiceEndpoint endpoint) {  
  11. }  
  12. #endregion  
  13. IOperationBehavior Members#region IOperationBehavior Members  
  14. public void AddBindingParameters(OperationDescription operationDescription, 
    BindingParameterCollection bindingParameters) {  
  15. }  
  16. public void ApplyClientBehavior(OperationDescription operationDescription,
     ClientOperation clientOperation) {  
  17. clientOperation.Parent.MessageInspectors.Add(new ContextHeader ());  
  18. }  
  19. public void ApplyDispatchBehavior(OperationDescription operationDescription, 
    DispatchOperation dispatchOperation) {  
  20. }  
  21. public void Validate(OperationDescription operationDescription) {  
  22. }  
  23. #endregion  

 

 

完工大吉,***在我們Contract中加入CallContextAttribute就可以啦,客戶端不用增加任何代碼了。

  1. [ServiceContract]  
  2. [CallContext]  
  3. public interface IBizTest {  
  4. [OperationContract]  
  5. [CallContext]  
  6. string GetWelcomeInfo();  

以上就是我們為大家介紹的WCF使用Header的相關操作方法。

責任編輯:曹凱 來源: 博客園
相關推薦

2010-02-24 13:48:44

MSMQ使用WCF

2010-02-26 11:22:16

LitwareHR使用

2010-02-24 10:07:48

WCF跨越邊界

2010-02-24 10:41:28

WCF服務保護

2009-12-21 10:09:26

WCF創建客戶端服務對

2010-02-25 13:48:23

WCF動態創建代碼

2010-02-25 16:52:12

引用WCF服務

2010-02-25 09:13:34

WCF異步調用

2010-02-26 08:59:10

WCF服務宿主程序

2009-12-29 18:09:00

Silverlight

2009-12-03 11:11:57

PHP網站優化

2009-12-11 17:52:21

PHP獲取博客數據

2009-12-07 18:42:55

PHP與Javascr

2010-02-26 10:30:03

ASP.NET Aja

2009-12-04 12:51:27

PHP functio

2009-12-09 16:49:09

PHP顯示文章發布時間

2010-01-06 15:56:18

.Net Framew

2010-04-29 17:31:56

Oracle存儲過程

2010-03-04 15:12:33

Python算法

2010-03-04 11:12:02

Python AOP
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一区二区在线免费观看 | 色综合美女 | 在线只有精品 | 日本色高清 | 欧洲精品码一区二区三区免费看 | 中文字幕一区二区三区日韩精品 | 久久久久久久久久久久91 | 国产精品久久久久久 | 操到爽| 亚洲电影一级片 | 久久久久黄 | 亚洲黄色片免费观看 | 一区二区三区在线 | 国产精品无码久久久久 | 亚洲精品乱码久久久久久蜜桃91 | 亚洲欧美综合精品久久成人 | 久操伊人 | 精品国产乱码久久久久久丨区2区 | 黄色片大全在线观看 | 99热都是精品 | av看片网站 | 亚洲视频一区在线 | 在线免费小视频 | 国产精品成人品 | 色资源在线视频 | 亚洲性视频 | 在线观看 亚洲 | 在线国产一区二区 | 天天干天天操天天射 | 一区二区精品在线 | 天堂一区| 国产精品久久久久久久一区二区 | 成人免费在线视频 | www.狠狠干 | 国产一二区免费视频 | 日韩在线观看网站 | 久久亚洲一区二区三区四区 | 蜜桃精品视频在线 | 午夜成人免费视频 | 久久精品国产精品青草 | 亚洲精品国产综合区久久久久久久 |