化零为整WCF(11) - 会话状态(Session)
作者:webabcd
介绍
WCF(Windows Communication Foundation) - 会话状态:
ServiceContract
·SessionMode.Allowed - 指定当传入绑定支持会话时,协定也支持会话(默认值)
·SessionMode.Required - 指定协定需要会话绑定。如果绑定并未配置为支持会话,则将引发异常
·SessionMode.NotAllowed - 指定协定永不支持启动会话的绑定
OperationContract
·IsInitiating - 获取或设置一个值,该值指示方法是否实现可在服务器上启动会话(如果存在会话)的操作。
·IsTerminating - 获取或设置一个值,该值指示服务操作在发送答复消息(如果存在)后,是否会导致服务器关闭会话。
示例
1、服务
IHello.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;using System.ServiceModel;
namespace WCF.ServiceLib.SessionManagement
{
/**//// <summary>
/// 演示会话状态的接口
/// </summary>NotAllowed
/// <remarks>
/// SessionMode - 获取或设置是否允许、不允许或要求会话
/// SessionMode.Allowed - 指定当传入绑定支持会话时,协定也支持会话(默认值)
/// SessionMode.Required - 指定协定需要会话绑定。如果绑定并未配置为支持会话,则将引发异常
/// SessionMode.NotAllowed - 指定协定永不支持启动会话的绑定
/// </remarks>
[ServiceContract(SessionMode = SessionMode.Required)]
public inte易做图ce IHello
{
/**//// <summary>
/// 初始化Session
/// </summary>
/// <remarks>
/// IsInitiating - 获取或设置一个值,该值指示方法是否实现可在服务器上启动会话(如果存在会话)的操作。
/// IsTerminating - 获取或设置一个值,该值指示服务操作在发送答复消息(如果存在)后,是否会导致服务器关闭会话。
/// </remarks>
[OperationContract(IsInitiating = true, IsTerminating = false)]
void StartSession();/**//// <summary>
/// 结束Session
/// </summary>
[OperationContract(IsInitiating = false, IsTerminating = true)]
void StopSession();/**//// <summary>
/// 获取计数器结果
/// </summary>
/// <returns></returns>
[OperationContract(IsInitiating = false, IsTerminating = false)]
int Counter();/**//// <summary>
/// 获取SessionId
/// </summary>
/// <returns></returns>
[OperationContract(IsInitiating = false, IsTerminating = false)]
string GetSessionId();
}
}Hello.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;using System.ServiceModel;
namespace WCF.ServiceLib.SessionManagement
{
/**//// <summary>
/// 演示会话状态的接口
/// </summary>
/// <remarks>
/// InstanceContextMode - 获取或设置指示新服务对象何时创建的值。
/// InstanceContextMode.PerSession - 为每个会话创建一个新的 System.ServiceModel.InstanceContext 对象。
/// InstanceContextMode 的默认值为 InstanceContextMode.PerSession
/// </remarks>
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class Hello : IHello
{
private int _counter;/**//// <summary>
/// 初始化Session
/// </summary>
public void StartSession()
{
_counter = 0;
}/**//// <summary>
/// 结束Session
/// </summary>
public void StopSession()
{
_counter = 0;
}/**//// <summary>
/// 获取计数器结果
/// </summary>
/// <returns></returns>
public int Counter()
{
_counter++;return _counter;
}/**//// <summary>
/// 获取SessionId
/// </summary>
/// <returns></returns>
public string GetSessionId()
{
return OperationContext.Current.SessionId;
}
}
}
2、宿主
Hello.svc
<%@ ServiceHost Language="C#" Debug="true" Service="WCF.ServiceLib.SessionManagement.Hello" %>
Web.config
<?xml version="1.0"?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="SessionManagementBehavior">
<!--httpGetEnabled - 使用get方式提供服务-->
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetai
补充:综合编程 , 其他综合 ,