Mam usługę WCF z około 500 klientami, którzy wykonują połączenie co 3 minuty. Proces lsass.exe używa 95% mojego procesora, kiedy usługa jest włączona.
Zrobiłem test i za każdym razem, gdy klient wykonuje połączenie, procesor CPU% idzie do około 7 lub więcej. Rozumiem, dlaczego serwer zwalnia połączenie, gdy kilkaset osób wysyła połączenia w tym samym czasie.
Czego nie rozumiem, dlaczego lsass jest w ogóle używany? Używam CustomBinding na podstawie zabezpieczeń WSHttpBinding z poziomem Message za pomocą Certificates. Instancja/Współbieżność to PerCall/Single (chociaż próbowałem prawie każdej kombinacji tych dwóch bez zmian) i jest ona hostowana w IIS 6.
Domyślam się, że dla każdego połączenia, lsass sprawdza certyfikat, a to w jakiś sposób zabiera dużo procesora? Czy jest jakiś sposób, że mogę to zmniejszyć? Wiem, że ludzie przeskalowali usługi WCF do znacznie większej liczby, więc co takiego robię źle?Nie rozumiem skalowania WCF z zabezpieczeniami/Dlaczego procesor pliku lsass.exe% jest tak wysoki?
P.S. Kilka dodatkowych informacji: Mam śledzenie na i pierwszą rzeczą, która zwykle dostaje zalogowany jest
<TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Warning">
<TraceIdentifier>http://msdn.microsoft.com/en-US/library/System.ServiceModel.Activation.WebHostNoCBTSupport.aspx</TraceIdentifier>
<Description>Extended protection is not supported or not enabled on this platform. Please install the appropriate patch and enable it if you want extendedProtection support for https with windows authentication.</Description>
<AppDomain>/LM/W3SVC/920256058/Root/WCFServices/smt-7-129642078492968750</AppDomain>
<Source>System.ServiceModel.Activation.MetabaseSettingsIis6/17731154</Source>
</TraceRecord>
I jest również grono:
http://msdn.microsoft.com/en-US/library/System.ServiceModel.Security.SecuritySessionDemuxFailure.aspx
The incoming message is not part of an existing security session.
i
<ExceptionType>System.ServiceModel.Security.SecurityNegotiationException, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType>
<Message>Cannot find the negotiation state for the context 'uuid-4caa56ff-3d38-4905-9151-ce12acdd676c-6778'.</Message>
i
<NegotiationTokenAuthenticator>System.ServiceModel.Security.TlsnegoTokenAuthenticator</NegotiationTokenAuthenticator>
<AuthenticatorListenUri>http://myserviceendpoint</AuthenticatorListenUri>
<Exception>System.ServiceModel.Security.SecurityNegotiationException: Cannot find the negotiation state for the context 'uuid-4caa56ff-3d38-4905-9151-ce12acdd676c-6778'.at System.ServiceModel.Security.NegotiationTokenAuthenticator`1.ProcessRequestCore(Message request) at System.ServiceModel.Security.NegotiationTokenAuthenticator`1.NegotiationHost.NegotiationSyncInvoker.Invoke(Object instance, Object[] inputs, Object[]&amp; outputs)</Exception>
Mój dziennik IIS jest pełny l
200 0 64
500 0 64
200 0 1236
500 0 1236
głównie dwóch ostatnich
Edycja: config usługa: Wszystkie
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data"/>
</configSections>
<connectionStrings>
<add name="conString" connectionString="Data Source=source1;Failover Partner=source2;database=myDatabase;Integrated Security=false;uid=userName;pwd=password" providerName="System.Data.SqlClient"/>
</connectionStrings>
<dataConfiguration defaultDatabase="conString"/>
<system.web>
<compilation debug="true" targetFramework="4.0"/>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
<system.serviceModel>
<services>
<service name="ServiceLibrary.Service">
<endpoint address="ws" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IService"
name="WSHttpEndpoint_IService" contract="ServiceLibrary.IService" />
<endpoint address="cs1" binding="customBinding" bindingConfiguration="CustomBinding_IService"
name="CustomEndpoint_IService" contract="ServiceLibrary.IService" />
<endpoint address="basic" binding="basicHttpBinding" name="BasicHttpEndpoint_IService"
contract="ServiceLibrary.IService" />
<endpoint address="mex" binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IService"
maxBufferPoolSize="524288" maxReceivedMessageSize="1048576">
<readerQuotas maxDepth="32" maxStringContentLength="65536" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="Message">
<message clientCredentialType="Certificate" negotiateServiceCredential="true"
algorithmSuite="Default" />
</security>
</binding>
</wsHttpBinding>
<customBinding>
<binding name="CustomBinding_IService">
<transactionFlow />
<security authenticationMode="SecureConversation" messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10">
<localServiceSettings maxClockSkew="00:10:00" maxPendingSessions="102400" />
<localClientSettings maxClockSkew="00:10:00" />
<secureConversationBootstrap authenticationMode="MutualSslNegotiated" messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10" />
</security>
<textMessageEncoding>
<readerQuotas maxDepth="32" maxStringContentLength="65536" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</textMessageEncoding>
<httpTransport maxBufferSize="1048576" maxReceivedMessageSize="1048576" />
</binding>
</customBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceCredentials>
<serviceCertificate findValue="CN=[domain]" storeLocation="LocalMachine" storeName="TrustedPeople" />
<clientCertificate>
<authentication revocationMode="NoCheck" certificateValidationMode="PeerTrust" />
</clientCertificate>
</serviceCredentials>
<serviceThrottling maxConcurrentCalls="1000" maxConcurrentSessions="1000" maxConcurrentInstances="1000" />
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
</configuration>
Klienci korzystają z CustomBinding. Problem nadal występuje przy wiązaniu WS. W rzeczywistości zrobiłem CustomBinding, aby rozwiązać problem, w którym usługa kończyła się z oczekujących sesji.
Pokaż również konfigurację swojej usługi. –