关于WCF SessionId的说明

在WCF中,会话(Session)是服务端获取客户端会话信息的一种机制,本文描述了会话存在的前提条件和范围,以及具体操作。

一、会话前提条件

WCF中存在会话的前提条件有:

1、契约属性SessionMode

契约协定中的SessionMode必须为Allowed(默认)或Required,代码示例如下:

using System.ServiceModel;

namespace SessionIdTest
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IHello" in both code and config file together.
    [ServiceContract(SessionMode = SessionMode.Required)]
    public interface IHello
    {
        [OperationContract]
        void Login(string name);

        [OperationContract]
        string Say(string content);

        [OperationContract]
        void Test();
    }
}

2、服务绑定

服务绑定必须能支持会话。

注意,BasicHttpBinding、MSMQ相关绑定是不支持会话的。

二、客户端如何传递SessionId到服务端

1、客户端代码

在客户端创建一个服务代理实例,将其放到OperationContextScope实例中使用。

另外,服务代理实例必须先Open,或先调用一个服务方法,才能使用SessionId。

使用SessionId的方法是:OperationContext.Current.SessionId。

代码如下:

            var client = new ss.HelloClient();
            string sessionId = string.Empty;
            using (OperationContextScope sp = new OperationContextScope(client.InnerChannel))
            {
                client.Open();
                client.Test();
                sessionId = OperationContext.Current.SessionId;
            }

2、服务端代码

服务端访问客户端会话ID的方法与客户端一样:OperationContext.Current.SessionId。

代码如下:

        public string Say(string content)
        {
            string str = OperationContext.Current.SessionId;
            return str;
        }

时间: 2024-11-08 00:50:44

关于WCF SessionId的说明的相关文章

WCF扩展

WCF 可扩展性 WCF 提供了许多扩展点供开发人员自定义运行时行为. WCF 在 Channel Layer 之上还提供了一个高级运行时,主要是针对应用程序开发人员.在 WCF 文档中,它常被称为服务模型层(Service Model Layer).该高级运行时主要由一个称作 Dispatcher(在 ServiceHost 的 Context 中)的组件和一个称作 Proxy(在客户端的 Context 中)的组件组成.       (       图片引自 MSDN Magazine : 

Detecting Client Connection in WCF Long Running Service (Heartbeat Implementation) z

Download source - 45.3 KB Introduction Hello everyone! This is my first blog on WCF and I hope that you like it. Today, I will talk about how to implement heart beat mechanism in WCF, so that whenever client is not alive, our WCF service detects it a

WCF之实例模型

PerCall. 为每次调用创建新的服务对象. 内存使用量最小,增加整体的吞吐量. 状态不保存,服务实例及时释放. 单例的状态没有办法保存.所以应使用数据库或者文件或者全局变量来保存服务实例的状态.如果单调服务真的与状态无关,就根本不需要单调激活模式.准确地讲,正是因为状态,特别是代价昂贵的状态,才需要使用单调模式. 不会有并发性问题. 服务的利用率最高,只有在需要时才会有服务实例的创建.不会有闲置的服务对象. 在实例销毁时,不会断开与客户端的连接.在事务编程(保证实例状态的同步)与队列服务中(

wcf双工通信

一直以为感觉双工没弄懂,着实觉得很惆怅,在网上了解下双工的一些特点,直接上代码,以便以后项目中用的着: service层: ? 1 定义一个IDuplexHello服务接口 ? 1 2 3 4 5 6 7 8 9 10 11 [ServiceContract(       Name = "DuplexHello",       Namespace = "http://microsoft.wcf.documentation",       CallbackContra

WCF之可靠性

可靠性会话: 端到端(多个点到点系统组成)的可靠性,基于消息,基于WS-*,可以跨平台. 在信道层创建可靠性会话,由两端的缓冲区进行可靠性管理(对消息进行排序后才发给服务器端,接收到消息后回发ACK.)跟TCP类似.当消息投递不成功时,会尝试重发(Meg2)可靠性消息实现了WS-RM,WS-RX的标准. WS-RM消息过程: 创建序列号(标示消息在传递时的位置).由消息的发送方发送.只有头一次发送时.应答序列号创建成功. 由服务器的服务信道发送.实际传输中,对消息序列号的应答.ACK,由服务进行

WCF初探-5:WCF消息交换模式之双工通讯(Duplex)

双工通讯Duplex具有以下特点: 1它可以在处理完请求之后,通过请求客户端中的回调进行响应操作 2.消息交换过程中,服务端和客户端角色会发生调换 3.服务端处理完请求后,返回给客户端的不是reply,而是callback请求. 4.Duplex模式对Bindding有特殊的要求,它要求支持Duplex MEP(Message Exchange Pattern),如WSDualHttpBinding和NetTcpBinding 注意:在WCF预定义绑定类型中,WSDualHttpBinding和

wcf 推送 与 广播

原文地址:http://blog.csdn.net/is_zhoufeng/article/details/7641234 ////wcf 接口 #region << 版 本 注 释 >> /**************************************************** * 文 件 名:IServices.cs * Copyright(c) 2011-2012 JiangGuoLiang * CLR 版本: 4.0.30319.235 * 创 建 人:Se

跟我一起学WCF(8)——WCF中Session、实例管理详解

一.引言 由前面几篇博文我们知道,WCF是微软基于SOA建立的一套在分布式环境中各个相对独立的应用进行交流(Communication)的框架,它实现了最新的基于WS-*规范.按照SOA的原则,相对独自的业务逻辑以Service的形式进行封装,调用者通过消息(Messaging)的方式来调用服务.对于承载某个业务功能实现的服务应该具有上下文(Context)无关性,意思就是说构造服务的操作(Operation)不应该绑定到具体的调用上下文,对于任何的调用,具有什么的样输入就会对应怎样的输出.因为

WCF揭秘学习笔记(4):可信赖会话、会话管理、队列、事务

可信赖会话 WCF的可信赖会话在绑定层保证消息只会被传输一次,并且保证消息间的顺序.当使用TCP通信时,协议本身保证了可靠性,但它只在两点间的网络 包这个层面提供了这样的保证.WCF的可信赖会话特性保证了在传输过程中消息不会丢失.重复或错位.这种保证是消息层面的,且适用于任何数目节点间的通 信.另外,使用可信赖会话时,WCF会重连掉线的连接,在重连失败时还会释放会话占用的相关资源.可信赖会话还会通过调整消息的发送频率来缓解网络拥挤. 为使用WCF的可信赖会话,必须选择支持可信赖会话的绑定.支持这