化零为整WCF(10) - 实例模型(InstanceContextMode)
作者:webabcd
介绍
WCF(Windows Communication Foundation) - 实例模型:
ServiceBehavior
·InstanceContextMode.PerCall - 新的 System.ServiceModel.InstanceContext 对象在每次调用前创建,在调用后回收。
·InstanceContextMode.PerSession - 为每个会话创建一个新的 System.ServiceModel.InstanceContext 对象。
·InstanceContextMode.Single - 只有一个 System.ServiceModel.InstanceContext 对象用于所有传入呼叫,并且在调用后不回收。如果服务对象不存在,则创建一个。
示例
1、服务
PerCallMode.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;using System.ServiceModel;
namespace WCF.ServiceLib.InstanceMode
{
/**//// <summary>
/// 演示实例模型的接口(PerCall)
/// </summary>
[ServiceContract]
public inte易做图ce IPerCallMode
{
/**//// <summary>
/// 获取计数器结果
/// </summary>
/// <returns></returns>
[OperationContract]
int Counter();
}/**//// <summary>
/// 演示实例模型的类(PerCall)
/// </summary>
/// <remarks>
/// InstanceContextMode - 获取或设置指示新服务对象何时创建的值。
/// InstanceContextMode.PerCall - 新的 System.ServiceModel.InstanceContext 对象在每次调用前创建,在调用后回收。
/// </remarks>
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class PerCallMode : IPerCallMode
{
private int _counter;/**//// <summary>
/// 获取计数器结果
/// </summary>
/// <returns></returns>
public int Counter()
{
_counter++;return _counter;
}
}
}PerSessionMode.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;using System.ServiceModel;
namespace WCF.ServiceLib.InstanceMode
{
/**//// <summary>
/// 演示实例模型的接口(PerSession)
/// </summary>
[ServiceContract()]
public inte易做图ce IPerSessionMode
{
/**//// <summary>
/// 获取计数器结果
/// </summary>
/// <returns></returns>
[OperationContract]
int Counter();
}/**//// <summary>
/// 演示实例模型的类(PerCall)
/// </summary>
/// <remarks>
/// InstanceContextMode - 获取或设置指示新服务对象何时创建的值。
/// InstanceContextMode.PerSession - 为每个会话创建一个新的 System.ServiceModel.InstanceContext 对象。
/// InstanceContextMode 的默认值为 InstanceContextMode.PerSession
/// </remarks>
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class PerSessionMode : IPerSessionMode
{
private int _counter;/**//// <summary>
/// 获取计数器结果
/// </summary>
/// <returns></returns>
public int Counter()
{
_counter++;return _counter;
}
}
}SingleMode.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;using System.ServiceModel;
namespace WCF.ServiceLib.InstanceMode
{
/**//// <summary>
/// 演示实例模型的接口(Single)
/// </summary>
[ServiceContract]
public inte易做图ce ISingleMode
{
/**//// <summary>
/// 获取计数器结果
/// </summary>
/// <returns></returns>
[OperationContract]
int Counter();
}/**//// <summary>
/// 演示实例模型的接口(Single)
/// </summary>
/// <remarks>
/// InstanceContextMode - 获取或设置指示新服务对象何时创建的值。
/// InstanceContextMode.Single - 只有一个 System.ServiceModel.InstanceContext 对象用于所有传入呼叫,并且在调用后不回收。如果服务对象不存在,则创建一个。
/// </remarks>
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class SingleMode : ISingleMode
{
private int _counter;/**//// <summary>
/// 获取计数器结果
/// </summary>
/// <returns></returns>
public int Counter()
{
_counter++;return _counter;
}
}
}
2、宿主
PerCallMode.svc
<%@ ServiceHost Language="C#" Debug="true" Service="WCF.ServiceLib.InstanceMode.PerCallMode" %>
PerSessionMode.svc
<%@ ServiceHost Language="C#" Debug="true" Service="WCF.ServiceLib.InstanceMode.PerSessionMode" %>
SingleMode.svc
<%@ ServiceHost Language="C#" Debug="true" Service="WCF.ServiceLib.InstanceMode.SingleMode" %>
Web.config
<?xml version="1.0"?>
<configuration>
<system.serviceModel>补充:综合编程 , 其他综合 ,