zoukankan      html  css  js  c++  java
  • 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的话,在周期范围内也会清理,提高性能;

  • 相关阅读:
    Navicat 总是断开连接
    MySQL 重连机制
    优化 一
    python之 paramiko模块 连接服务器
    变量值的修改
    Python使用APScheduler实现定时任务
    Linux命令 清空文件
    输入法 | 输入法如何打出直角引号
    Java | Java字节码
    英语 | 图片学习单词
  • 原文地址:https://www.cnblogs.com/guozefeng/p/3427551.html
Copyright © 2011-2022 走看看