0

Я настраиваю пользовательскую службу ClaimsAuthenticationManager для моей службы wcf. Теперь я узнал, что метод ClaimsAuthenticationManager.Authenticate выполняется для каждого вызова wcf. Вместо этого я хочу, чтобы он выполнялся один раз за сеанс, чтобы избежать лишних накладных расходов.Сделать вызов WCF ClaimsAuthenticationManager.Authenticate только один раз за сеанс

Согласно Microsoft:

Менеджер аутентификации претензий, как правило, вызывается один раз за сеанс, со следующими исключениями: Для обеспечения транспортной безопасности Жетоны присутствующих на транспортном уровне будет ссылаться на аутентификацию претензий раз за вызов , даже если сеансы присутствуют.

Источник: https://msdn.microsoft.com/en-us/library/ee748487.aspx

Поскольку мой обычай связывания не использует транспортной безопасности я не вижу причин, почему ClaimsAuthenticationManager.Authenticate выполняется за вызов.

Кто-нибудь знает, есть ли дополнительные требования, которые необходимо выполнить, чтобы этот метод вызывался один раз за сеанс? Большое спасибо за любые предложения.

ФОС конфигурации связывания:

<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> 

ответ

0

Если вы хотите использовать на сессии вызова, а затем попытаться как this-

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)] 
public class MyService:IMyService 
{ 
    public int MyMethod() 
    { 
     int m_Counter = 0; 
     m_Counter++; 
     return m_Counter; 
    }  
} 
+0

У меня уже есть этот параметр на моей службе, это не поможет. – driAn

Смежные вопросы