WCF状态应用基本概念简单描述

在WCF开发工具中,对于状态的应用是一个比较基础的应用技术。我们需要积累这方面的经验来达到一个熟练应用的地步。在接下来的文章中,我们首先为大家介绍一下WCF状态应用的一些基本概念。

WCF状态应用的设定是由以下两步完成的,首先要在ServiceContract里面利用参数SessionMode来使Session有效化,具体代码为

 
 
 
  1. [ServiceContract(SessionModeSessionMode=SessionMode.Required)]; 

其次是在ServiceBehavior里面利用参数InstanceContextMode来设定到底使用那一种Session方式,具体代码如下

 
 
 
  1. [ServiceBehavior(InstanceContextModeInstanceContextMode=
    InstanceContextMode.PerSession); 

 

WCF支持的SessionMode有如下三种:#t#

◆SessionMode.Allowed:默认选项,允许但不强制使用Session。

◆SessionMode.NotAllowed:不允许使用Session。

◆SessionMode.Required:强制使用Session。

WCF支持的InstanceContextMode也有三种:

◆InstanceContextMode.PerCall:为User的每一次调用生成一个SessionID,Session生命周期:调用开始->调用结束。(注:这种方式和不使用Session功能应该是一样的)

◆InstanceContextMode.PerSession:为每一个用户生成一个SessionID。Session生命周期:客户端代理生成->客户端代理关闭。(这种方式最像原先的Session)

◆InstanceContextMode.Single:生成一个唯一的SessionID,所有用户共用,生命周期:Host创建->Host关闭。(应用设计模式中的Singleton模式,像原先的Application)

WCF状态应用的实例是以PerSession为例,当然,这里的Session和原来的Session还是有一些区别的,具体如下:

(1)并没有一个显示的Session容器供存放数据用;

(2)Session的销毁和原先的Session不相同。

WCF中的Session可以在以下三种情况下销毁:

(a)利用函数销毁,如文中示例,在函数ReleaseSession()上用[OperationContract(IsTerminating=true)]表明客户端可以通过调用该函数销毁Session。

(b)客户端代理关闭,Session也会自动销毁。

(c)通过TimeOut时间销毁,默认是10分钟,这个时间客户端和服务器端都可以设定,以较短的时间为有效时间。
因此,个人认为,WCF中的Session的可控性更强一些。

在示例中还有一个问题要注意,在服务器端函数捕捉到异常之后,一定要通过throw new FaultException(ex.Message);的形式将错误抛到客户端,否则的话,客户端调用用的Channel将会被堵塞,因此就无法继续调用释放资源的函数了。

要向客户端抛异常必须设定WebConfig项,具体代码如下:

 

 
 
 
  1. < configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> 
  2. < system.serviceModel>< services> 
  3. < !-- Before deployment, you should remove the returnFaults 
    behavior configuration to avoid disclosing information in exception messages --
    > 
  4. < service name="MyService" behaviorConfiguration="SessionTrans"> 
  5. < endpoint contract="IMyService" binding="wsHttpBinding"/>< /service>
  6. < /services>< behaviors> 
  7. < serviceBehaviors> 
  8. < behavior name="SessionTrans" returnUnknownExceptionsAsFaults="True"> 
  9. < serviceMetadata httpGetEnabled="true" /> 
  10. < serviceDebug includeExceptionDetailInFaults="true" /> 
  11. < /behavior>< /serviceBehaviors>< /behaviors>< /system.serviceModel> 
  12. < system.web>< compilation debug="true"/>< /system.web>< /configuration>  

以上介绍的WCF状态应用的相关知识供大家学习参考。

免责声明:文章内容不代表本站立场,仅供读者参考。产品相关技术问题请发送工单。 本文链接:https://www.idc.net/help/403331/

为您推荐

开源数据收集引擎 Logstash 讲解和示例讲解

一、概述 Logstash 是一个开源的数据收集和日志处理工具,它是 Elastic Stack(ELK Stack)的一部分,用于从各种数据源中采集、转换和传输数据,以帮助分析和可视化大规模数据。Logstash 通常与 Elasticsearch 和 Ki...

八个开源免费单点登录(SSO)系统

单点登录(SSO)是一个登录服务层,通过一次登录访问多个应用。使用SSO服务可以提高多系统使用的用户体验和安全性,用户不必记忆多个密码、不必多次登录浪费时间。 下面推荐一些市场上最好的开源SSO系统,可作为商业SSO替代。 1.Authelia https://github.com/authelia/authelia ...

浅谈HBase数据结构和系统架构

Part 01 LSM树模型 常见的的关系型数据库,如MySQL、SQL Server、Oracle等,使用B+ Tree作为数据存储与索引的基本结构,非叶子节点只存放索引数据,叶子节点存放所有数据和指向相邻节点的指针,具有高效的范围查询和稳定的查找效率,以及具有较小的读放大和空间放大。采用磁盘随机读写方式,且以磁盘数...

微软Radius平台重构现代应用程序部署

微软的 Azure 孵化团队日前推出一个叫 Radius 的新应用平台。Radius 平台可用于在 Kubernetes、公共云和边缘环境中运行各种现代应用程序。 Radius 是一个开源项目,最初支持的应用程序运行时包括Kubernetes、Azure和AWS,以后还会支持诸如谷歌云平台等云环境。 Mark Russ...

Ext JS3.0正式版发布

Ext JS3.0在经历数次RC版之后,extjs.com终于发布3.0的正式版。总体而言,较2.0改进不大,依然还是原理的组件模型,具体更新及改进如下: ◆提供了参照DWR后与后台的通讯包Direct,支持具有明显的REST风格的CRUD服务 ◆一系列的新的组件和例子,包括有图表(Charting, By YUI F...
返回顶部