0

我为我的 wcf 服务设置了一个自定义 ClaimsAuthenticationManager。现在我发现每个 wcf 调用都会执行 ClaimsAuthenticationManager.Authenticate 方法。相反,我希望每个会话执行一次,以避免不必要的开销。

据微软称:

声明身份验证管理器通常在每个会话中调用一次,但以下情况除外:对于传输安全性,存在于传输层的令牌将在每次调用时调用一次声明身份验证,即使存在会话也是如此。

来源:https ://msdn.microsoft.com/en-us/library/ee748487.aspx

由于我的自定义绑定不使用传输安全性,我看不出为什么每次调用都会执行 ClaimsAuthenticationManager.Authenticate。

有谁知道是否需要满足进一步的要求才能让这个方法在每个会话中调用一次?非常感谢您的任何建议。

wcf 绑定配置:

<behaviors>
  <serviceBehaviors>
    <behavior name="defaultBehavior">
      <serviceDebug includeExceptionDetailInFaults="True" />
      <serviceThrottling maxConcurrentCalls="200" maxConcurrentSessions="200" maxConcurrentInstances="200" />
      <serviceCredentials useIdentityConfiguration="true" />
      <serviceAuthorization principalPermissionMode="Always" />
    </behavior>
  </serviceBehaviors>
</behaviors>

<bindings>
  <netNamedPipeBinding>
    <binding name="ServiceNamedPipeBinding" receiveTimeout="00:05:00" sendTimeout="00:05:00" maxReceivedMessageSize="134217728" maxBufferPoolSize="134217728" maxBufferSize="134217728" />
  </netNamedPipeBinding>
  <customBinding>
    <binding name="TcpLoadBalanced" receiveTimeout="00:05:00" sendTimeout="00:05:00">
      <security authenticationMode="SecureConversation" requireSecurityContextCancellation="true">
        <secureConversationBootstrap authenticationMode="SspiNegotiated"/>
      </security>
      <binaryMessageEncoding>
        <readerQuotas maxArrayLength="2147483647" />
      </binaryMessageEncoding>
      <tcpTransport listenBacklog="200" maxBufferPoolSize="134217728" maxReceivedMessageSize="134217728" maxBufferSize="134217728">
        <connectionPoolSettings leaseTimeout="00:00:00" maxOutboundConnectionsPerEndpoint="0" />
      </tcpTransport>
    </binding>
  </customBinding>
</bindings>
4

1 回答 1

0

如果你想使用每个会话调用,那么试试这样 -

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]
public class MyService:IMyService
{
    public int MyMethod()
    {
        int m_Counter = 0;
        m_Counter++;
        return m_Counter;
    }       
}
于 2015-02-23T10:28:52.330 回答