大家对的WCF三种服务都很了解了吧,但是怎样更好的结合到实践中,想必有些人不知道怎么做,下面我们来介绍本次的示例代码,这里我们分别定义了三种激活类型的服务类:单调服务(Per-CallService),会话服务(SessionfulService),单例服务(SingletonService),托管宿主分别进行托管,这里为了测试,我们使用的绑定协议也是TCP方式,其他的协议这里没做具体的实现,有兴趣的朋友可以自己扩展修改代码,进行测试。
#T#WCF服务支持三种实例激活的类型:单调服务(Per-Call Service):每次的客户端请求分配一个新的服务实例。类似于Net Remoting的SingleCall模式;会话服务(Sessionful Service):则为每次客户端连接分配一个服务实例。类似于Net Remoting的客户端激活模式;单例服务(Singleton Service):所有的客户端会为所有的连接和激活对象共享一个相同的服务实例。类似于Net Remoting的SingleTon模式。
WCF服务:定义了一个服务契约,一个操作SayHello(),具体的WCF服务类型定义和激活类型配置如下:
- //此例定义了一个服务契约,三种服务分别为单调服务、会话服务、单例服务或单件服务
- namespaceWCFService
- {
- //1.服务契约
- [ServiceContract(SessionModeSessionMode=SessionMode.Allowed,Namespace="http://www.cnblogs.com/frank_xl/")]
- publicinterfaceIWCFService
- {
- //操作契约
- [OperationContract]
- voidSayHello();
- }
- //2.服务类.单调服务
- [ServiceBehavior(InstanceContextModeInstanceContextMode=InstanceContextMode.PerCall)]
- publicclassWCFServicePerCall:IWCFService,IDisposable
- {
- //服务实例计数
- privateintmCcount=0;
- //构造函数
- publicWCFServicePerCall()
- {
- Console.WriteLine("WCFServicePerCallInstanceisCreated");
- }
- //实现接口定义的方法
- publicvoidSayHello()
- {
- mCcount++;
- Console.WriteLine("WCFServicePerCallInstanceCountis:{0}",mCcount);
- }
- //实现接口定义的方法Dispose
- publicvoidDispose()
- {
- Console.WriteLine("WCFServicePerCallInstanceisdisposed");
- }
- }
- //3.服务类.会话服务
- [ServiceBehavior(InstanceContextModeInstanceContextMode=InstanceContextMode.PerSession)]
- publicclassWCFServicePerSession:IWCFService
- {
- //服务实例计数
- privateintmCcount=0;
- //构造函数
- publicWCFServicePerSession()
- {
- Console.WriteLine("WCFServicePerSessionInstanceisCreated");
- }
- //实现接口定义的方法
- publicvoidSayHello()
- {
- mCcount++;
- Console.WriteLine("WCFServicePerSessionInstanceCountis:{0}",mCcount);
- }
- //实现接口定义的方法Dispose
- publicvoidDispose()
- {
- Console.WriteLine("WCFServicePerSessionInstanceisdisposed");
- }
- }
- //4.服务类.单例服务
- [ServiceBehavior(InstanceContextModeInstanceContextMode=InstanceContextMode.Single)]
- publicclassWCFServiceSingleTon:IWCFService
- {
- //服务实例计数
- privateintmCcount=0;
- //构造函数
- publicWCFServiceSingleTon()
- {
- Console.WriteLine("WCFServiceSingleTonInstanceisCreated");
- }
- //实现接口定义的方法
- publicvoidSayHello()
- {
- mCcount++;
- Console.WriteLine("WCFServiceSingleTonInstanceCountis:{0}",mCcount);
- }
- //实现接口定义的方法Dispose
- publicvoidDispose()
- {
- Console.WriteLine("WCFServiceSingleTonInstanceisdisposed");
- }
- }
- }