Инициирование WCF занимает слишком много времени - PullRequest
3 голосов
/ 16 июня 2011

Служба WCF занимает около 5-6 секунд для первого запроса после того, как все вызовы выполняются очень быстро. ниже приведена конфигурация на стороне клиента для моей службы WCF.

Использование хостинга IIS.

        WSHttpBinding binding = new WSHttpBinding();
        binding.SendTimeout = TimeSpan.FromMinutes(1);
        binding.OpenTimeout = TimeSpan.FromMinutes(1);
        binding.CloseTimeout = TimeSpan.FromMinutes(1);
        binding.ReceiveTimeout = TimeSpan.FromMinutes(1);
        binding.AllowCookies = false;
        binding.BypassProxyOnLocal = false;
        binding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;

        binding.MessageEncoding = WSMessageEncoding.Mtom; 

        binding.TextEncoding = System.Text.Encoding.UTF8;
        binding.UseDefaultWebProxy = true;
        binding.Name = "BasicHttpBinding_ILearningService";


        binding.Security.Mode = SecurityMode.Transport;              
        binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
        binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None;
        binding.Security.Transport.Realm = "";

Конфигурация на стороне сервера

<services>
  <service behaviorConfiguration="LearningServiceServiceBehavior" name="LearningService">
    <host>

      <baseAddresses>
        <add baseAddress="https://xxxxx/LearningService.svc" />
      </baseAddresses>
    </host>
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="TransportSecurity" contract="ILearningSuiteService">
      <identity>
        <dns value="localhost" />
      </identity>
     </endpoint>

    <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
  </service>
</services>
<bindings>
  <wsHttpBinding>
    <binding name="TransportSecurity" messageEncoding="Mtom" sendTimeout="00:1:00" openTimeout="00:2:00">
      <security mode="Transport">
        <transport clientCredentialType="None" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior name="LearningServiceServiceBehavior">
      <serviceMetadata httpsGetEnabled="true" httpGetEnabled="false" httpGetUrl="http://xxxxxxx/Metadata" httpsGetUrl="https://xxxxxxxx/Metadata" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>

Ответы [ 3 ]

4 голосов
/ 16 июня 2011

Другая проблема, с которой вы можете столкнуться, заключается в том, что, поскольку вы используете транспортную безопасность, вы выполняете проверку сертификата на клиенте каждый раз, когда создаете новый прокси-сервер.Возможно ли, что проверка сертификата стоит дорого, скажем, из-за того, что список отзыва для сертификата не доступен своевременно?

Попробуйте отключить защиту и посмотрите, не изменит ли это поведение

2 голосов
/ 16 июня 2011

Хотя это и не совсем определенно, похоже, что вы являетесь хостингом IIS (я говорю не точно, потому что baseAddresses не указываются вами на хостинге IIS, скорее фактический файл .svc является базовым адресом для службы)

Предполагая, что вы являетесь хостингом IIS, вы видите время ускорения рабочего процесса? В зависимости от используемой версии Windows вы можете использовать Windows Server AppFabric для автоматического запуска службы перед первым запросом

1 голос
/ 14 июля 2011

При первом вызове клиент устанавливает соединение с сервером, а сервер выполняет необходимую аутентификацию, это может занять некоторое время.И исходя из того, что я нашел в своем проекте, сериализация WCF в первый раз может занять много времени, если ваш контракт огромен.После этого сериализация может быть намного быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...