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

WCF信道工廠接口與相關基類描述

開發 開發工具
WCF信道工廠定義了兩個接口,分別為IChannelFactory和IChannelFactory< TChannel>。他們定義了WCF信道工廠最基本的屬性與功能。

WCF開發框架中有一種叫做WCF信道工廠的東西。對于剛剛接觸WCF不久的朋友可能對其還不太了解。由于信道管理器在客戶端和服務端所起的不同作用,分為信道監聽器和信道工廠。#t#

和服務端的信道監聽其相比,處于客戶端的信道工廠顯得簡單。從名稱就可以看得出來,WCF信道工廠的作用就是單純的創建用于消息發送的信道。我們先來看看與信道工廠相關的一些接口和基類的定義。

一、WCF信道工廠相關的接口和基類

對于信道監聽器,WCF定義了兩個接口:IChannelListener和IChnnelListener< TChannel>。與之相對地,WCF也為信道工廠定義了兩個接口:IChannelFactory和IChannelFactory< TChannel>。這兩個接口定義了信道工廠最基本的功能和屬性,下面是這兩個接口的定義:

  1. public interface IChannelFactory 
    : ICommunicationObject  
  2. {  
  3. // Methods  
  4. T GetProperty< T>() where T : class;  
  5. }  
  6. public interface IChannelFactory< TChannel> 
    : IChannelFactory, ICommunicationObject  
  7. {  
  8. // Methods  
  9. TChannel CreateChannel(EndpointAddress to);  
  10. TChannel CreateChannel(EndpointAddress 
    to, Uri via);  
  11. }  

由于WCF信道工廠的目的就是單純的創建信道,所以IChannelFactory和IChannelFactory< TChannel>的定義顯得格外簡潔。兩個重載的CreateChannel方法通過目的終結點的地址(to),以及在手工尋址下不同于目的終結點地址的另一個地址,該地址是消息實際會被發送的地址(via)。關于To和Via可以參考第二章關于物理地址和邏輯地址的部分。

除了上面的兩個接口之外,WCF還定義分別是實現了它們的兩個抽象基類:ChannelFactoryBase和ChannelFactoryBase< TChannel>。

ChannelFactoryBase繼承自所有信道管理器的基類:CnannelManagerBase,而ChannelManagerBase又繼承自CommunicationObject,實現ICommunicationObject接口定義的基本的狀態屬性和狀態轉換功能。并且實現了接口IChannelFactory和ICommunicationObject。而ChannelFactoryBase< TChannel>繼承自CnannelManagerBase,并且實現了接口:IChannelFactory< TChannel>, IChannelFactory和ICommunicationObject。

一般地,范型類型TChannel為基于相應channel shape下客戶端信道類型,比如IOutputChannel、IRequestChannel和IDuplexChannel。ChannelFactoryBase和ChannelFactoryBase< TChannel>的簡單定義如下:

  1. public abstract class ChannelFactoryBase
     : ChannelManagerBase, IChannelFactory, 
    ICommunicationObject  
  2. {  
  3. ......  
  4. }  
  5. public abstract class ChannelFactoryBase
    < TChannel> : ChannelFactoryBase, IChannel
    Factory
    < TChannel>, IChannelFactory, 
    ICommunicationObject  
  6. {  
  7. ......  
  8. }   

 

二、案例演示:如何自定義WCF信道工廠

在上一個案例中,我們創建了一個自定義的信道監聽器:SimpleReplyChannelListner。該信道監聽器用于在請求-回復消息交換模式下進行請求的監聽。在本案例中,我們來創建與之相對的信道工廠:SimpleChannelFactory< TChannel>,用于請求-回復消息交換模式下進行用于請求發送信道的創建。由于SimpleChannelFactory< TChannel>的實現相對簡單,將所有代碼一并附上。

SimpleChannelFactory< TChannel>直接繼承自抽象基類SimpleChannelFactoryBase< TChannel>。字段成員_innerChannelFactory表示信道工廠棧中后一個信道工廠對象,該成員在構造函數中通過傳入的BindingContext對象的BuildInnerChannelFactory< TChannel>方法創建。

OnCreateChannel是核心大方法,實現了真正的信道創建過程,在這里我們創建了我們自定義的信道:SimpleRequestChannel.。構建SimpleRequestChannel. 的InnerChannel通過­­­_innerChannelFactory的CreateChannel方法創建。對于其他的方法(OnOpen、OnBeginOpen和OnEndOpen),我們僅僅通過PrintHelper輸出當前的方法名稱,并調用­_innerChannelFactory相應的方法。

 

  1. public class SimpleChannelFactory< TChannel>
     : ChannelFactoryBase
    < TChannel> 
  2. {  
  3. public IChannelFactory< TChannel> _innerChannelFactory;   
  4. public SimpleChannelFactory(BindingContext context)  
  5. {  
  6. PrintHelper.Print(this, "SimpleChannelFactory");  
  7. this._innerChannelFactory = context.
    BuildInnerChannelFactory
    < TChannel>();  
  8. }   
  9. protected override TChannel OnCreateChannel
    (EndpointAddress address, Uri via)  
  10. {  
  11. PrintHelper.Print(this, "OnCreateChannel");  
  12. IRequestChannel innerChannel = this._
    innerChannelFactory.CreateChannel(address,
     via) as IRequestChannel;  
  13. SimpleRequestChannel. channel = new 
    SimpleRequestChannel.(this, innerChannel);  
  14. return (TChannel)(object)channel;  
  15. }   
  16. protected override IAsyncResult OnBeginOpen
    (TimeSpan timeout, AsyncCallback callback, 
    object state)  
  17. {  
  18. PrintHelper.Print(this, "OnBeginOpen");  
  19. return this._innerChannelFactory.BeginOpen
    (timeout, callback, state);  
  20. }  
  21. protected override void OnEndOpen(IAsyncResult result)  
  22. {  
  23. PrintHelper.Print(this, "OnEndOpen");  
  24. this._innerChannelFactory.EndOpen(result);  
  25. }   
  26. protected override void OnOpen(TimeSpan timeout)  
  27. {  
  28. PrintHelper.Print(this, "OnOpen");  
  29. this._innerChannelFactory.Open(timeout);  
  30. }  
  31. }   

 

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

2010-02-22 15:00:02

WCF信道工廠

2010-03-02 18:01:07

WCF自定義消息篩選器

2010-02-22 15:06:31

WCF信道監聽器

2009-12-07 18:33:31

WCF Service

2009-12-22 16:03:03

WCF異常

2009-12-07 15:02:46

WCF學習

2009-12-08 16:42:48

WCF Service

2010-02-26 16:20:56

WCF程序事務

2021-10-17 18:54:40

Python定義使用

2010-02-22 17:58:06

WCF異步上傳

2010-03-01 09:19:10

WCF編碼規范

2010-02-22 14:53:17

WCF用戶密碼

2010-03-02 16:22:31

WCF狀態應用

2009-08-20 19:08:49

ADODataRead

2025-02-07 08:47:38

C#派生類接口

2010-02-23 17:30:41

WCF部署于IIS

2010-02-24 11:22:04

WCF方法重載

2010-02-25 13:40:17

WCF禁用安全配置

2010-02-26 16:05:14

寄宿WCF服務

2010-02-25 13:54:48

WCF安全參數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产福利视频网站 | 久久久亚洲一区 | 日本久久网 | 日本精品免费在线观看 | 91视频正在播放 | 中文字幕在线观看精品 | 九九久久免费视频 | 欧美日韩亚洲国产 | 国产91观看 | 宅男噜噜噜66一区二区 | 日韩一区二区三区在线播放 | 国产福利在线 | 中文字幕一区二区三区精彩视频 | 亚洲欧美视频 | 亚洲欧洲日本国产 | 国产中文字幕在线 | 99综合 | 天天操夜夜操 | 91成人午夜性a一级毛片 | 免费午夜电影 | 超碰人人艹 | 久久久国产一区二区三区 | 国产精品免费一区二区三区四区 | 亚洲精品久久久久久首妖 | 婷婷久久综合 | 成人午夜精品 | 一级a爱片久久毛片 | 一区二区精品视频 | 一区二区三区中文字幕 | 亚洲精品视频在线 | 婷婷精品 | 高清欧美性猛交 | 欧美日韩一区精品 | 国产成人免费视频 | 久久91精品 | 天天艹天天干天天 | 欧美成人激情 | 99re国产 | 久久伊人影院 | 欧美成人精品激情在线观看 | 国产精品爱久久久久久久 |