• 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的话,在周期范围内也会清理,提高性能;

  • 相关阅读:
    前端模块化,AMD,CMD 总结
    前端基本网络协议知识整合
    websocket心跳机制
    js 数组方法的作用,各方法是否改变原有的数组
    React函数组件和类组件的区别
    js 单线程、宏任务与微任务的执行顺序
    js为什么是单线程
    allure清空上一次运行的记录(--clean-alluredir)
    allure的Tag标记(allure.story、allure.feature、severity)
    allure集成缺陷管理系统和测试管理系统(allure.link、allure.issue、allure.testcase)
  • 原文地址:https://www.cnblogs.com/guozefeng/p/3427551.html
Copyright © 2020-2023  润新知