0

wcf サービス用にカスタム ClaimsAuthenticationManager をセットアップします。メソッド ClaimsAuthenticationManager.Authenticate がすべての wcf 呼び出しに対して実行されることがわかりました。代わりに、不必要なオーバーヘッドを避けるために、セッションごとに 1 回実行したいと考えています。

マイクロソフトによると:

クレーム認証マネージャーは通常、次の例外を除いて、セッションごとに 1 回呼び出されます

ソース: https://msdn.microsoft.com/en-us/library/ee748487.aspx

私のカスタム バインディングはトランスポート セキュリティを使用しないため、呼び出しごとに ClaimsAuthenticationManager.Authenticate が実行される理由がわかりません。

代わりに、このメソッドをセッションごとに 1 回呼び出すために満たす必要がある追加の要件があるかどうかは誰にもわかりませんか? ご提案いただきありがとうございます。

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 に答える