• wcf实例模型(随记)


    -----------------------------------------实例模型:

    1.InstanceContentextMode:

    -------PerCall(单调):无状态,每次调用之间都是独立的,没有关系;

    为每个调用创建新的对象(全新的service);增加了整体吞吐量,内存开销少(服务用时创建,不用时销毁),不会产生并发;

    若服务对象创建需要较长时间,就要考虑放弃这种方式;

    声明方式:

    在实现接口的服务上添加标签

     [ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall)]

    -----PerSession(系统缺省 会话):有状态(指的是一个session内部,session和session之间没有联系),每次调用具有相关的连续性,比如给一个变量赋值为1,那么第二次调用,变量值依

    然为1;

    单个client,单个session内部,数据是共享的;,第一次调用和第二次调用是同一服务;单不同client或不同session,是独立的;

    内存开销大,引发多线程并发;

    不支持basichttpbinding;其他绑定差不多都支持;

    可以配置对话(控制session):sessionMode:Allowed(缺省)如果binding为basichttpbinding,会强制改为percall,因为不支持;,

    notallowed:当前wcf对象服务不支持会话,required:强制使用会话,若组合为Persession+basichttpBinding,就会剖出异常了,推荐使用notallowed和required;

    会话的声明:

    在契约上添加声明:   

    [ServiceContract(SessionMode=SessionMode.Allowed)]

    public interface Iguo

    -----Single(单件模型):整个wcf在整个生命周期所有对象都是有状态的,对象可以在不同的session之间共享;

    只有一个servie,类似单例模式吧,所有会话之间相互影响,内存开销大,引发并发;

    ----------session(会话):传输会话,可靠性会话,安全会话,应用程序会话;

    wcf会话有客户端发起;sessionId:任何形式的会话都会生成会话信道,会话id将消息与信道关联;

    sessionServiceClient proxy=new sessionServiceClient();

    string s=proxy.innerChannel.sessionId;

    ---会话生命周期;通过配置文件进行配置:receiveTimeOut

    <netTcpBinding>

      <binding name="netTcp" receiveTimeOut="00:10:00"/>

    </netTcpBinding>

    ---

    [PerationContract(IsInitiating=false,IsTerminating=false)]

    IsInitiating=true,:是否创建一个会话;

    IsTerminating=false:是否结束一个会话,为true的话,在周期范围内也会清理,提高性能;

  • 相关阅读:
    Altium Designer 快捷键,长期更新
    代码: 0x80131500:应用商店崩溃怎么修复
    (转)stm32cubeMx配置使用encoder编码器
    STM32 PWM注意事项
    转载 STM32 使用Cubemx 建一个USB(HID)设备下位机,实现数据收发
    STM32Cube填坑,ST link 下载一次以后无法下载
    SuperSocket 学习笔记-客户端
    python-kaggle之旅
    Leetcode刷题记(9)——移除元素
    Leetcode刷题记(8)——删除排序数组中的重复项
  • 原文地址:https://www.cnblogs.com/guozefeng/p/3427551.html
Copyright © 2020-2023  润新知