频道栏目
首页 > 程序开发 > 综合编程 > 其他综合 > 正文
化零为整WCF(10) - 实例模型(InstanceContextMode)
2011-04-25 18:06:02           
收藏   我要投稿

作者: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 interface 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 interface 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 interface 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>

点击复制链接 与好友分享!回本站首页
相关TAG标签 实例 模型
上一篇:化零为整WCF(9) - 序列化
下一篇:化零为整WCF(11) - 会话状态(Session)
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站