当前位置:编程学习 > 网站相关 >>

化零为整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>

补充:综合编程 , 其他综合 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,