知识大全 一起学WCF--PerSession实例行为

Posted

篇首语:寸阳分阴须爱惜,休负春色与时光。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 一起学WCF--PerSession实例行为相关的知识,希望对你有一定的参考价值。

一起学WCF--PerSession实例行为  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  这一节 大家了解下PerSession实例行为 PerSession表示会话实例行为 当客户端调用服务器后 服务器端会为客户端分配一个新的服务实例 这个实例在服务器端SESSION时间过期后将失效 客户端每调用一次服务 在客户端生成一个新的代理实例 都会产生一个新的会话

  PerSession实例行为有点类似于ASP NET中的session 但又些不同

  在WCF中使用PerSession实例 需要手动设置行为

  [ServiceBehavior(InstanceContextMode=InstanceContextMode PerSession)] 默认情况下 WCF的实例行为为PerSession

  在WCF中 并不是所有通信协议都可以使用PerSession实例行为的 只有支持会话的通信协议才可以使用PerSession实例 如 NetTcpBinding NetNamePipeBinding

  wsHttpBinding wsFederationHttpBinding wsDualHttpBinding

   PerSession设置

  我们看下代码中怎样设置 persession实例行为 服务器端契约和行为设置

  在契约实现上设置实例行为 在契约上设置会话模式

  [ServiceContract(SessionMode=SessionMode Allowed)] public interface IPerSession [OperationContract] int AddCountBySession(); [ServiceBehavior(InstanceContextMode=InstanceContextMode PerSession)] public class PerSessionImpl:IPerSession IDisposable private int num; /// <summary> /// 通过 Session模式的方法调用 /// </summary> /// <returns></returns> public int AddCountBySession() num = num + ; Console WriteLine( 当前值: +num ToString()+ 时间: +DateTime Now ToString()); return num; public void Dispose() Console WriteLine( 释放实例 );

  客户端调用

  private void button _Click(object sender EventArgs e) //PerSession调用方式 ChannelFactory<IPerSession> channelFactory = new ChannelFactory<IPerSession>( WSHttpBinding_IPerSession ); IPerSession client = channelFactory CreateChannel(); //同一个客户端实例调用AddCount方法两次 输出的结果一样 client AddCountBySession(); client AddCountBySession();

  在上面的客户端调用代码 我们同一个实例调用了两次方法 此时发现服务器端变量的值出现递增 这是因为这两次调用在同一个会话内

  我们多次点击按钮 会发现每次点击 服务器端的变量值都是从 开始递增 这是因为每次点击按钮都创建了一个新的代理实例 相当于创建了一个新的会话

  执行结果如下             

  我们可以这样理解一个会话 在客户端每生成一个代理实例 就算一个会话 例如上面的 IPerSession client = channelFactory CreateChannel();实例 就是一个会话 所以调用了AddCountBySession方法两次 出现变量值递增的情况

  客户端调用

  接下来 我们在客户端启动的时候 创建一个全局实例变量 这样连续单击按钮执行多次 服务器端的变量值一直会递增 因为多次执行都是在一个会话内完成的

  

  private void Form _Load(object sender EventArgs e) ChannelFactory<IPerSession> channelFactory = new ChannelFactory<IPerSession>( WSHttpBinding_IPerSession ); Sessionclient = channelFactory CreateChannel(); IPerSession Sessionclient; private void button _Click(object sender EventArgs e) //定义一个全局session实例 进行调用 Sessionclient AddCountBySession();

  执行结果如下

       以上代码我们创建了一个全局实例 多次点击按钮执行 服务器端变量值在同一个会话期内一直递增

   Session时效设置

  PerSession模式的会话时间是有限制的 我们可以手动设置session的会话时间 一旦超过了session的有效时间 session会自动释放

  可以在服务器端的配置文件中的绑定设置中设置会话时间

  receiveTimeout= : : 表示会话时间为 秒 一旦超时 服务器就会关闭会话

  配置文件如下

  <bindings> <wsHttpBinding> <binding name= WSHttpBinding_IPerSession closeTimeout= : : openTimeout= : : receiveTimeout= : : sendTimeout= : : bypassProxyOnLocal= false transactionFlow= false hostNameComparisonMode= StrongWildcard maxBufferPoolSize= maxReceivedMessageSize= messageEncoding= Text textEncoding= utf useDefaultWebProxy= true allowCookies= false > <readerQuotas maxDepth= maxStringContentLength= maxArrayLength= maxBytesPerRead= maxNameTableCharCount= /> <reliableSession ordered= true inactivityTimeout= : : enabled= false /> <security mode= Message > <transport clientCredentialType= Windows proxyCredentialType= None realm= /> <message clientCredentialType= Windows negotiateServiceCredential= true algorithmSuite= Default /> </security> </binding> </wsHttpBinding> </bindings>

  通过以上的例子 我们知道Persession的优缺点

   通过persession可以设置会话的有效期 保证服务实例在一定范围内可以重复利用

  缺点

cha138/Article/program/net/201311/11660

相关参考

道德既是一种善恶评价,也是一种行为规范

道德既是一种善恶评价,也是一种行为规范。_____答案:正确解析:把“道德”两字连在一起用,始见于荀子《劝学》篇:“故学至于礼而止矣,夫是之谓道德之极。”可见,道德从它的原始规定和后来的使用来说,就包

学生甲在篮球场捡到了一张校园卡,由于没带现金,口渴的他用此卡在学校超市买了一瓶水,其行为算不上违法。()

学生甲在篮球场捡到了一张校园卡,由于没带现金,口渴的他用此卡在学校超市买了一瓶水,其行为算不上违法。()A、正确B、错误正确答案:B

学生甲在篮球场捡到了一张校园卡,由于没带现金,口渴的他用此卡在学校超市买了一瓶水,其行为算不上违法。()

学生甲在篮球场捡到了一张校园卡,由于没带现金,口渴的他用此卡在学校超市买了一瓶水,其行为算不上违法。()A、正确B、错误正确答案:B

知识大全 多线程实例——每一秒显示一次系统时间

  多线程学过编程的都知道但我现在才算真的明白他是用来干什么的就像是完成某一目的把它分成不同方向同时运行实施最后由主方向完成结束这样就达到高效率低消耗的目的了  每一秒显示一次系统时间这一项目很容易但

知识大全 实例描述

PHPWeb开发学习实录:实例描述  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   实

知识大全 实例应用

PHPWeb开发学习实录:实例应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   实

知识大全 数组实例描述

PHPWeb开发学习实录:数组实例描述  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 数组实例应用

PHPWeb开发学习实录:数组实例应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 变量实例应用

PHPWeb开发学习实录:变量实例应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 变量实例描述

PHPWeb开发学习实录:变量实例描述  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!