Я пытаюсь отлаживать, почему наше программное обеспечение (клиент и сервер) работает медленно в определенных средах. Я пробовал несколько вещей без успеха, и теперь я не понимаю, как продолжить отслеживание проблемы. Мой вопрос: какие вещи я могу попробовать или изучить, чтобы решить эту проблему?
Мы разрабатываем самостоятельную службу WCF для запуска на сервере и клиентское приложение для подключения к ней. Служба взаимодействует с базой данных (MS SQL server).
Настройка A
Настройка B
сходства
Различия
Вещи, которые я пробовал
Другие мысли
Вещи, которые я собираюсь попробовать
Сервис app.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<configSections>
<section name="fooNET.serviceProvider" type="foo.fooNET.ServiceRegistration.Classes.ServiceProviderConfiguration, foo.fooNET.ServiceRegistration" />
<section name="nlog" type="bar.com.foo.NLog.Config.ConfigSectionHandler, foo.NLog" />
</configSections>
<connectionStrings>
<add name="BaseDB" connectionString="..." />
<add name="UserStore2" connectionString="..." />
<add name="UserStore" connectionString="..." providerName="System.Data.EntityClient" />
<add name="MetricCollectionDAL.Properties.Settings.MASSMetricsConnectionString" connectionString="..." />
</connectionStrings>
<appSettings>
<add key="maxRequestLength" value="16384" />
<add key="exclusiveFlag" value="true" />
<add key="SubscriptionDeleteNotification" value="true" />
</appSettings>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="file" xsi:type="File" fileName="${basedir}/fooNetLog.txt" keepFileOpen="true" layout="${date:format=MM/dd/yyyy HH\:mm\:ss}|${level}|${windows-identity}|${callsite}|${message}" archiveEvery="Day" maxArchiveFiles="5" />
<target name="session" xsi:type="File" fileName="${basedir}/sessionlog.txt" keepFileOpen="true" layout="${date:format=MM/dd/yyyy HH\:mm\:ss}|${level}|${windows-identity}|${callsite}|${message}" concurrentWrites="false" deleteOldFileOnStartup="true" />
</targets>
<rules>
<logger name="*" minlevel="Error" writeTo="file,session" />
</rules>
</nlog>
<fooNET.serviceProvider xmlns="foo.fooNET">
<plugins directory="Plugins" />
<baseAddress uri="https://localhost:6040/ServiceProvider" />
<brokers count="1" remoteRegister="true" registrationInterval="1" />
</fooNET.serviceProvider>
<system.serviceModel>
<diagnostics performanceCounters="All" />
<services>
<service behaviorConfiguration="ServiceProviderBehavior" name="foo.fooNET.ServiceRegistration.Classes.ServiceProvider">
<endpoint address="" binding="ws2007FederationHttpBinding" bindingConfiguration="ws2007Binding" behaviorConfiguration="EndpointBehavior" contract="foo.fooNET.Shared.Server.Interfaces.IServiceProvider" />
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="https://localhost:6040/ServiceProvider" />
</baseAddresses>
<timeouts closeTimeout="00:10:00" openTimeout="00:10:00" />
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceProviderBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" policyVersion="Policy15" />
<serviceDebug includeExceptionDetailInFaults="false" />
<serviceSecurityAudit auditLogLocation="Application" suppressAuditFailure="false" serviceAuthorizationAuditLevel="Failure" messageAuthenticationAuditLevel="Failure" />
<serviceThrottling maxConcurrentCalls="32" maxConcurrentSessions="20" maxConcurrentInstances="2147483647" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="EndpointBehavior">
<dispatcherSynchronization maxPendingReceives="6" />
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<ws2007FederationHttpBinding>
<binding name="2007MtomBinding" closeTimeout="01:00:00" openTimeout="00:40:00" receiveTimeout="01:00:00" sendTimeout="00:40:00" transactionFlow="false" maxBufferPoolSize="0" maxReceivedMessageSize="2147483647" messageEncoding="Mtom" useDefaultWebProxy="false">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<reliableSession ordered="false" inactivityTimeout="01:00:00" enabled="false" />
<security mode="TransportWithMessageCredential">
<message establishSecurityContext="false">
<claimTypeRequirements>
<add claimType="http://bar.com/foo/fooNET/claims/FirstName" isOptional="false" />
</claimTypeRequirements>
</message>
</security>
</binding>
<binding name="ws2007Binding" closeTimeout="01:00:00" openTimeout="00:05:00" receiveTimeout="01:00:00" sendTimeout="00:40:00" maxReceivedMessageSize="2147483647" maxBufferPoolSize="0" useDefaultWebProxy="false">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<reliableSession inactivityTimeout="01:00:00" />
<security mode="TransportWithMessageCredential">
<message negotiateServiceCredential="false" establishSecurityContext="false">
<claimTypeRequirements>
<add claimType="http://bar.com/foo/fooNET/claims/FirstName" isOptional="false" />
</claimTypeRequirements>
</message>
</security>
</binding>
</ws2007FederationHttpBinding>
<wsHttpBinding>
<binding name="AuthenticationBinding" closeTimeout="01:00:00" receiveTimeout="01:00:00" sendTimeout="00:40:00" maxReceivedMessageSize="2147483647" bypassProxyOnLocal="true">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<reliableSession inactivityTimeout="01:00:00" />
<security mode="Transport" />
</binding>
</wsHttpBinding>
<ws2007HttpBinding>
<binding name="SecurityAuth" sendTimeout="00:40:00" maxReceivedMessageSize="2147483647" closeTimeout="01:00:00" receiveTimeout="01:00:00" useDefaultWebProxy="false">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<reliableSession inactivityTimeout="01:00:00" />
<security mode="TransportWithMessageCredential">
<message negotiateServiceCredential="true" />
</security>
</binding>
</ws2007HttpBinding>
</bindings>
</system.serviceModel>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>
</configuration>
Обновление 2014-11-18
Получил "моментальный снимок" сервера A (single file.vhd). Создал новую виртуальную машину в гипер-v (должен был добавить роль гипер-v) на сервере B с одним процессором и 2 ГБ оперативной памяти и загружен на сервер A vhd. Локальная виртуальная машина сервера A с локальным соединением выполняется так же быстро, как ожидалось. Единственное, что это говорит мне, - нет ничего плохого в физической коробке. Пробовал изменять количество ядер, выделенных VM, до 4 без каких-либо изменений.
Вытащил сервер A VM. Я сделал три изменения
Я провел wirehark и захватил первоначальную аутентификацию и запуск. Мгновенно получил тонну записей, таких как:
Я изменил учетную запись, которая запускает службу для учетной записи в домене, но тогда я вообще не мог общаться. Я получаю исключение (на клиенте), которое говорит
"Объект связи, System.ServiceModel.Channels.ServiceChannel, не может использоваться для связи, поскольку он находится в состоянии Faulted".
Который, кажется, указывает, что это неперехваченное/необработанное исключение.
Удалось извлечь полезное исключение:
"Ошибка аутентификации поставщика поддержки безопасности (SSPI). Возможно, сервер не запущен в учетной записи с идентификатором" host/[computer] ". Если сервер работает в учетной записи службы (например, Network Service), укажите учетную запись ServicePrincipalName как идентификатор в EndpointAddress для сервера. Если сервер работает в учетной записи пользователя, укажите учетную запись UserPrincipalName как идентификатор в EndpointAddress для сервера. "
Собирался начать выяснять, что это значит (например, здесь), но затем я изменил с учетной записи домена на флажок "локальная системная учетная запись" в services.msc, и все очень быстро.
<behaviors> <endpointBehaviors>
и<behaviors> <serviceBehaviors>