首页 > 解决方案 > InstanceContextMode = InstanceContextMode.PerSession 不工作

问题描述

我是 WCF 新手,我编写了一个使用 InstanceContextMode 的示例 WCF 服务。当我使用 PerSession 时,我的计数器值不会增加。为什么它不为每个服务调用使用相同的实例。下面是我的代码

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class Service1 : IService1
{
    int count;
    public int Add(int a, int b)
    {
        count++;
        return a + b;
    }

    public int GetCount()
    {
        return count;
    }
}

网络配置

<system.serviceModel>
<behaviors>
  <serviceBehaviors>
    <behavior>
      <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<protocolMapping>
    <add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>    
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />

客户端.cs

DemoWCFService.Service1Client client = new DemoWCFService.Service1Client();
        Console.WriteLine(""+ client.Add(10,20));
        Console.WriteLine("" + client.Add(10, 20));
        Console.WriteLine("" + client.Add(10, 20));

        Console.WriteLine("" + client.GetCount());
        Console.ReadKey();

请帮我解决一下这个。

标签: c#wcf

解决方案


BasicHttpBinding 不支持 PerSession。最好使用支持会话的绑定,例如 WSHttpBinding、WS2007HttpBinding。

为确保您使用支持会话的绑定,您可以使用服务行为

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]

如果您的绑定不支持会话,则会导致错误。


推荐阅读