WCF分布式开发步步为赢(9):WCF服务实例激活类型编程与开发
2010-08-29 23:07
597 查看
转自:http://www.cnblogs.com/frank_xl/archive/2009/04/29/1437493.html
作者:老徐
.NetRemoting的激活方式也有三种:SingleTon模式、SingleCall模式、客户端激活方式,WCF服务实例激活类型包括三种方式:单调服务(Call Service),会话服务(Sessionful Service),单例服务(SingletonService).他们之间有什么联系。WCF服务激活类型的优势和缺点,以及如何在项目里编程开发和设置服务实例。全文分为5个部分,首先一次介绍单调服务(Call Service),会话服务(Sessionful Service),单例服务(SingletonService)的相关概念,优势和缺点,其次是示例代码分析和讲解部分,最后是全文的总结部分。结构如下:【1】单调服务(CallService)【2】会话服务(Sessionful Service)【3】单例服务(SingletonService)【4】示例代码分析【5】总结。最后会上传本文的代码。
【引言】:
在WCF分布式开发必备知识(2):.Net Remoting这篇文章里我已经介绍过了Net Remoting相关的概念,其中也包括NetRemoting的激活方式:SingleTon模式、SingleCall模式、客户端激活方式。其实WCF服务的激活方式也与此相似。服务激活方式也是WCF借鉴Net Remoting的一个明显的例子。Net Remoting相关的概念大家可以查阅WCF分布式开发必备知识(2):.Net Remoting这篇文章。 下面我们就来详细的介绍WCF服务激活类型相关的知识点。首先来介绍的是单调服务。
WCF支持三种实例激活的类型:
1>.单调服务(Per-Call Service):每次的客户端请求分配一个新的服务实例。类似于Net Remoting的SingleCall模式;
2>.会话服务(Sessionful Service):则为每次客户端连接分配一个服务实例。类似于Net Remoting的客户端激活模式;
3>.单例服务(Singleton Service):所有的客户端会为所有的连接和激活对象共享一个相同的服务实例。类似于Net Remoting的SingleTon模式。
这里的服务激活模式是由我们定义的服务的上下文模式InstanceContextMode
属性来配置的,其代码如下:
【4.3】客户端:
运行宿主,添加服务引用,反序列化服务元数据为本地代码。完成以后添加测试的代码。每种服务激活类型创建2个代理实例,分别调用2次服务,测试不同的服务激活类型设置对服务实例的影响。我们来观察服务实例化的次数。具体代码如下:
////////////////////////////////////////////单调服务//////////////////////////////////////////////////
#region //1.单调服务代理1 实例化,每次调用操作,会创建不同的服务实例
WCFServicePerCall.WCFServicePerCallClient WCFServicePerCallProxy1 = new WCFServicePerCall.WCFServicePerCallClient();
//调用2次服务
for (int i = 0; i < 2;i++ )
{
WCFServicePerCallProxy1.SayHello();
}
//关闭服务代理
WCFServicePerCallProxy1.Close();
WCFServicePerCall.WCFServicePerCallClient WCFServicePerCallProxy2
= new WCFServicePerCall.WCFServicePerCallClient();
//调用2次服务
for (int i = 0; i < 2; i++)
{
WCFServicePerCallProxy2.SayHello();
}
//关闭服务代理
WCFServicePerCallProxy2.Close();
#endregion
////////////////////////////////////////会话服务////////////////////////////////////////////////////////
#region//2.会话服务代理 实例化,一个客户端代理对应一个服务实例
WCFServicePerSession.WCFServicePerSessionClient WCFServicePerSessionProxy1 = new WCFServicePerSession.WCFServicePerSessionClient();
//调用2次服务
for (int i = 0; i < 2; i++)
{
WCFServicePerSessionProxy1.SayHello();
}
//关闭服务代理
WCFServicePerSessionProxy1.Close();
WCFServicePerSession.WCFServicePerSessionClient WCFServicePerSessionProxy2
= new WCFServicePerSession.WCFServicePerSessionClient();
//调用2次服务
for (int i = 0; i < 2; i++)
{
WCFServicePerSessionProxy2.SayHello();
}
//关闭服务代理
WCFServicePerSessionProxy2.Close();
#endregion
////////////////////////////////////////////单例服务//////////////////////////////////////////////////
#region//2.单例服务代理 实例化,也叫单件模式。所有的服务只有一个服务实例
WCFServiceSingleTon.WCFServiceSingleTonClient WCFServiceSingleTonProxy1 = new WCFServiceSingleTon.WCFServiceSingleTonClient();
//调用2次服务
for (int i = 0; i < 2; i++)
{
WCFServiceSingleTonProxy1.SayHello();
}
WCFServiceSingleTonProxy1.Close();
WCFServiceSingleTon.WCFServiceSingleTonClient WCFServiceSingleTonProxy2
= new WCFServiceSingleTon.WCFServiceSingleTonClient();
//调用2次服务
for (int i = 0; i < 2; i++)
{
WCFServiceSingleTonProxy2.SayHello();
}
WCFServiceSingleTonProxy2.Close();
#endregion
//4.For Debugging
Console.WriteLine("Press any key to continue");
Console.Read();
【4.4】运行结果:
启动托管宿主,运行客户端进行测试,监控服务输出信息如下:
【5】总结:
(1)单调服务每次都重新创建服务的实例,操作完成以后,释放服务对象,每次想用用户操作请求的服务实例不同。
(2)会话服务针对每次会话创建一个特定的服务实例对象,在一次会话中的所有请求由一个服务对象相应。我们的服务调用计数也在会话期间随客户端调用的次数增加,上图可见。
(3)单例服务在宿主创建时就进行了实例化。他和会话和调用次数没有关系,所有的客户单服务调用操作均有同一个服务实例来响应。客户单调用的次数越多,服务端实际调用次数就会随之增加。上图可见。
(4)另外我们也可以编程或者配置系统的最大并发调用数、最大并发会话数、最大并发实例数,来控制和管理服务实例的负荷和流量。
以上就是本节的全部内容,最后上传此次的示例代码,供大家参考/Files/frank_xl/WCFServiceActivationFrankXuLei.rar.欢迎留言交流~下面会继续学习服务操作相关的内容学习。
参考文章:
1.《Programming WCF Services》;
2.WCF分布式开发必备知识(2):.Net Remoting
作者:老徐
.NetRemoting的激活方式也有三种:SingleTon模式、SingleCall模式、客户端激活方式,WCF服务实例激活类型包括三种方式:单调服务(Call Service),会话服务(Sessionful Service),单例服务(SingletonService).他们之间有什么联系。WCF服务激活类型的优势和缺点,以及如何在项目里编程开发和设置服务实例。全文分为5个部分,首先一次介绍单调服务(Call Service),会话服务(Sessionful Service),单例服务(SingletonService)的相关概念,优势和缺点,其次是示例代码分析和讲解部分,最后是全文的总结部分。结构如下:【1】单调服务(CallService)【2】会话服务(Sessionful Service)【3】单例服务(SingletonService)【4】示例代码分析【5】总结。最后会上传本文的代码。
【引言】:
在WCF分布式开发必备知识(2):.Net Remoting这篇文章里我已经介绍过了Net Remoting相关的概念,其中也包括NetRemoting的激活方式:SingleTon模式、SingleCall模式、客户端激活方式。其实WCF服务的激活方式也与此相似。服务激活方式也是WCF借鉴Net Remoting的一个明显的例子。Net Remoting相关的概念大家可以查阅WCF分布式开发必备知识(2):.Net Remoting这篇文章。 下面我们就来详细的介绍WCF服务激活类型相关的知识点。首先来介绍的是单调服务。
WCF支持三种实例激活的类型:
1>.单调服务(Per-Call Service):每次的客户端请求分配一个新的服务实例。类似于Net Remoting的SingleCall模式;
2>.会话服务(Sessionful Service):则为每次客户端连接分配一个服务实例。类似于Net Remoting的客户端激活模式;
3>.单例服务(Singleton Service):所有的客户端会为所有的连接和激活对象共享一个相同的服务实例。类似于Net Remoting的SingleTon模式。
这里的服务激活模式是由我们定义的服务的上下文模式InstanceContextMode
属性来配置的,其代码如下:
<service behaviorConfiguration="WCFService.WCFServiceBehavior" name="WCFService.WCFServicePerCall"> <endpoint address="net.tcp://localhost:9001/WCFServicePerCall" binding="netTcpBinding" contract="WCFService.IWCFService"> </endpoint> <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" /> <host> <baseAddresses> <add baseAddress="net.tcp://localhost:9001/"/> </baseAddresses> </host> </service> <service behaviorConfiguration="WCFService.WCFServiceBehavior" name="WCFService.WCFServicePerSession"> <endpoint address="net.tcp://localhost:9002/WCFServicePerSession" binding="netTcpBinding" contract="WCFService.IWCFService"> </endpoint> <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" /> <host> <baseAddresses> <add baseAddress="net.tcp://localhost:9002/"/> </baseAddresses> </host> </service> <service behaviorConfiguration="WCFService.WCFServiceBehavior" name="WCFService.WCFServiceSingleTon"> <endpoint address="net.tcp://localhost:9003/WCFServiceSingleTon" binding="netTcpBinding" contract="WCFService.IWCFService"> </endpoint> <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" /> <host> <baseAddresses> <add baseAddress="net.tcp://localhost:9003/"/> </baseAddresses> </host> </service> </services>
【4.3】客户端:
运行宿主,添加服务引用,反序列化服务元数据为本地代码。完成以后添加测试的代码。每种服务激活类型创建2个代理实例,分别调用2次服务,测试不同的服务激活类型设置对服务实例的影响。我们来观察服务实例化的次数。具体代码如下:
////////////////////////////////////////////单调服务//////////////////////////////////////////////////
#region //1.单调服务代理1 实例化,每次调用操作,会创建不同的服务实例
WCFServicePerCall.WCFServicePerCallClient WCFServicePerCallProxy1 = new WCFServicePerCall.WCFServicePerCallClient();
//调用2次服务
for (int i = 0; i < 2;i++ )
{
WCFServicePerCallProxy1.SayHello();
}
//关闭服务代理
WCFServicePerCallProxy1.Close();
WCFServicePerCall.WCFServicePerCallClient WCFServicePerCallProxy2
= new WCFServicePerCall.WCFServicePerCallClient();
//调用2次服务
for (int i = 0; i < 2; i++)
{
WCFServicePerCallProxy2.SayHello();
}
//关闭服务代理
WCFServicePerCallProxy2.Close();
#endregion
////////////////////////////////////////会话服务////////////////////////////////////////////////////////
#region//2.会话服务代理 实例化,一个客户端代理对应一个服务实例
WCFServicePerSession.WCFServicePerSessionClient WCFServicePerSessionProxy1 = new WCFServicePerSession.WCFServicePerSessionClient();
//调用2次服务
for (int i = 0; i < 2; i++)
{
WCFServicePerSessionProxy1.SayHello();
}
//关闭服务代理
WCFServicePerSessionProxy1.Close();
WCFServicePerSession.WCFServicePerSessionClient WCFServicePerSessionProxy2
= new WCFServicePerSession.WCFServicePerSessionClient();
//调用2次服务
for (int i = 0; i < 2; i++)
{
WCFServicePerSessionProxy2.SayHello();
}
//关闭服务代理
WCFServicePerSessionProxy2.Close();
#endregion
////////////////////////////////////////////单例服务//////////////////////////////////////////////////
#region//2.单例服务代理 实例化,也叫单件模式。所有的服务只有一个服务实例
WCFServiceSingleTon.WCFServiceSingleTonClient WCFServiceSingleTonProxy1 = new WCFServiceSingleTon.WCFServiceSingleTonClient();
//调用2次服务
for (int i = 0; i < 2; i++)
{
WCFServiceSingleTonProxy1.SayHello();
}
WCFServiceSingleTonProxy1.Close();
WCFServiceSingleTon.WCFServiceSingleTonClient WCFServiceSingleTonProxy2
= new WCFServiceSingleTon.WCFServiceSingleTonClient();
//调用2次服务
for (int i = 0; i < 2; i++)
{
WCFServiceSingleTonProxy2.SayHello();
}
WCFServiceSingleTonProxy2.Close();
#endregion
//4.For Debugging
Console.WriteLine("Press any key to continue");
Console.Read();
【4.4】运行结果:
启动托管宿主,运行客户端进行测试,监控服务输出信息如下:
【5】总结:
(1)单调服务每次都重新创建服务的实例,操作完成以后,释放服务对象,每次想用用户操作请求的服务实例不同。
(2)会话服务针对每次会话创建一个特定的服务实例对象,在一次会话中的所有请求由一个服务对象相应。我们的服务调用计数也在会话期间随客户端调用的次数增加,上图可见。
(3)单例服务在宿主创建时就进行了实例化。他和会话和调用次数没有关系,所有的客户单服务调用操作均有同一个服务实例来响应。客户单调用的次数越多,服务端实际调用次数就会随之增加。上图可见。
(4)另外我们也可以编程或者配置系统的最大并发调用数、最大并发会话数、最大并发实例数,来控制和管理服务实例的负荷和流量。
以上就是本节的全部内容,最后上传此次的示例代码,供大家参考/Files/frank_xl/WCFServiceActivationFrankXuLei.rar.欢迎留言交流~下面会继续学习服务操作相关的内容学习。
参考文章:
1.《Programming WCF Services》;
2.WCF分布式开发必备知识(2):.Net Remoting
相关文章推荐
- WCF分布式开发步步为赢(9):WCF服务实例激活类型编程与开发
- WCF分布式开发步步为赢(9):WCF服务实例激活类型编程与开发
- WCF分布式开发步步为赢(9):WCF服务实例激活类型编程与开发
- WCF分布式开发步步为赢(9):WCF服务实例激活类型编程与开发
- WCF服务实例激活类型编程与开发(转)
- WCF服务实例激活类型编程与开发
- WCF分布式开发步步为赢(3)WCF服务元数据交换、配置及编程开发
- WCF分布式开发步步为赢(4):WCF服务可靠性传输配置与编程开发
- WCF分布式开发步步为赢(3)WCF服务元数据交换、配置及编程开发
- WCF分布式开发步步为赢(4):WCF服务可靠性传输配置与编程开发
- WCF分布式开发步步为赢(3)WCF服务元数据交换、配置及编程开发
- WCF分布式开发步步为赢(3)WCF服务元数据交换、配置及编程开发
- 使用WCF实现SOA面向服务编程——简单的WCF开发实例
- WCF分布式开发步步为赢(4):WCF服务可靠性传输配置与编程开发
- 一起谈.NET技术,使用WCF实现SOA面向服务编程——简单的WCF开发实例
- 使用W“.NET技术”CF实现SOA面向服务编程——简单的WCF开发实例
- 热门话题:使用WCF实现SOA面向服务编程(二)——实现简单的WCF开发实例
- WCF分布式开发步步为赢(3)WCF服务元数据交换、配置及编程开发
- WCF分布式开发步步为赢(4):WCF服务可靠性传输配置与编程开发
- 使用WC“.NET研究”F实现SOA面向服务编程——简单的WCF开发实例