Instancing modes in WCF

1.什么是Instancing modes?
这里写图片描述
通过上图我们可以了解到,客户端每次向WCF服务发送请求的时候,会首先在WCF服务端生成一个服务实例,然后通过服务实例来回应客户端的请求。因此Instancing modes 就表示服务实例在服务器上持久的时间长短,有三种方式。
2.PerCall
不管客户端是否相同,针对于每一次的请求,都会创建一个新的服务实例
特点
A.一个方法用完以后立即释放,能够节约内存
B.高并发不是问题
C.灵活性好
D.状态不能维持在不同的请求中
E.性能可能是一个问题,因为每次的请求都会重新构造一个新的服务实例
3.PerSession
在一次客户端的会话中,创建一个新的服务实例,并在此会话中保存此实例

特点
A.可以保持状态在不同的会话
B.在一个会话期间,非常的消耗内存。并且也会影响应用的可扩展性
4.Single
在针对于所有的请求中,就创建一个实例,不管客户端是否相同
特点
A.一个单利的服务实例回应所有的客户端的请求
B.并发是个问题
C.当请求多时,处理慢时,会产生请求队列,会延迟当前的进程。
5.实例讲解
上述三种状态的修改也非常的简单,参照下面的Demo

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace SimpleService
{
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“SimpleService”。
    [ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
    public class SimpleService : ISimpleService
    {
        private int _number;

        public int IncrementNumber()
        {

            _number = _number + 1;
            return _number;
        }
    }
}

6.问题汇总
1.不是所有的bingding都支持session。例如BasicHttpBinding就不支持
2.如何控制WCF服务Session超时?

 <bindings>
      <wsHttpBinding>
        <!--设置超时的时间-->
        <binding receiveTimeout="00:00:10" name="mex">
          <!--产生的sessionid将会一致-->
          <reliableSession enabled="true"/>

        </binding>
      </wsHttpBinding>
    </bindings>

3.当遇到WCF服务超时时,如何解决?
当遇到超时异常时,只需要添加判断,并创建新的服务实例即可。

    private void button1_Click(object sender, EventArgs e)
        {

            try
            {
                MessageBox.Show("text is" + client.IncrementNumber());
            }
                //接受超时异常
            catch (System.ServiceModel.CommunicationException)
            {
                //判断超时异常
                if (client.State == System.ServiceModel.CommunicationState.Faulted)
                {
                    MessageBox.Show("create new one");
                    //创建信息的服务实例
                    client = new Simple.SimpleServiceClient();
                }

            }
        }
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值