WCF Параллелизм? - PullRequest
       5

WCF Параллелизм?

3 голосов
/ 07 февраля 2012

У меня служба WCF, развернутая на IIS 7 и клиенте. Я думал, что служба настроена для обработки параллелизма. Когда я тестировал с двумя клиентами, это заняло вдвое больше времени. Я провел часы и пока не смог понять, где я это пропустил. Любая помощь / предложения будут оценены. Service1.svc.cs выглядит так:

[ServiceBehavior( ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.PerCall)]
[CallbackBehavior(UseSynchronizationContext=false)]
public class Service1 : IService1
{        
    public byte[] DownloadFile()
    {
        byte[] byt = File.ReadAllBytes(@"C:\Temp\TestFile.pdf");
        System.Threading.Thread.Sleep(1000);
        return byt;
     }
}

Конфигурация:

    <system.net>
    <connectionManagement>
      <add address="*" maxconnection="100"/>
    </connectionManagement>
  </system.net>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
    <processModel autoConfig="false" maxWorkerThreads="1400" maxIoThreads="1400" minWorkerThreads="2"/>
    <httpRuntime minFreeThreads="1000" minLocalRequestFreeThreads="1000"/>
  </system.web>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="Service1Binding" maxBufferSize="2147483647" maxBufferPoolSize="2147483647"
          maxReceivedMessageSize="2147483647" transferMode="Streamed">
          <readerQuotas maxDepth="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" />
        </binding>
      </basicHttpBinding>
    </bindings>
    <services>
      <service name="DocService.Service1">        
        <endpoint address="http://localhost/DocService/Service1.svc" binding="basicHttpBinding"
          bindingConfiguration="" name="Service1Binding" bindingName="Service1Binding"
          contract="DocService.IService1" />
        <endpoint address="http://localhost/DocService/mex" binding="mexHttpBinding"
          name="mexpoint" contract="IMetadataExchange" />
      </service>
    </services>    
    <behaviors>
      <serviceBehaviors>
        <behavior>          
          <serviceMetadata httpGetEnabled="true"/>          
          <serviceDebug includeExceptionDetailInFaults="false"/>
          <serviceThrottling maxConcurrentCalls="100" maxConcurrentInstances="100" maxConcurrentSessions="100"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>

Transfer TimeLine in Fiddler

1 Ответ

3 голосов
/ 07 февраля 2012

Запросы занимают намного больше времени, чем 1 с, и время чтения, скажем, файла 10 МБ. Они должны завершиться в 1.1-2 с. Здесь есть что-то подозрительное.

Закомментируйте прочитанное и верните новый байт [0]. Требуется ли сейчас 1,0 с? Есть ли у вас параллелизм сейчас?

Редактировать: Каким клиентом вы пользуетесь?

Редактировать 2: Отвечая на ваш комментарий, передача файла каким-то образом не ограничивает параллелизм. WCF не волнует, что вы делаете внутри вашего метода обслуживания. Он ничего не знает о файлах. Проблема в том, что ваш диск слишком медленный и что сериализация 36 МБ, вероятно, слишком медленная! Ваш сервер слишком медленный! Вы можете выяснить, является ли проблема с диском или сериализацией, заменив IO новым байтом [1024 *1024* 36].

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