Как читать потоки параллельно на клиенте из метода службы WCF, не блокируя друг друга?

Я пытаюсь создать приложение для загрузки, в котором будет четыре или более очередей загрузки, с помощью которых пользователь может загружать файлы с сервера. Что было бы наилучшим решением для достижения этой цели, не позволяя очередям блокировать друг друга. Я запускаю каждую очередь загрузки в отдельном фоновом потоке, который сообщает о прогрессе пользовательскому интерфейсу клиента WPF по мере загрузки байтов из службы. Но новая очередь загрузки блокирует любую ранее запущенную очередь загрузки. Я пытался много искать в Google и Stackru, но все еще не смог решить проблему

Применяемая методология. Мы используем Windows Azure Service Bus для подключения к нашей службе WCF с помощью NetTcpRelayBinding.

Конфигурация на стороне клиента:

<system.serviceModel>
    <bindings>
      <!-- Application Binding -->
      <netTcpRelayBinding>
        <binding name="default" 
                 connectionMode="Hybrid" 
                 maxReceivedMessageSize="2147483647" 
                 transferMode="Streamed" 
                 closeTimeout="01:00:00" 
                 openTimeout="00:30:00" 
                 sendTimeout="infinite" 
                 receiveTimeout="infinite" 
                 maxBufferPoolSize="2147483647" 
                 maxBufferSize="2147483647" 
                 maxConnections="500"
                 listenBacklog="200">

          <security mode="None"/>
          <readerQuotas maxBytesPerRead="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" />
          <reliableSession enabled="false" ordered="true" />
        </binding>
      </netTcpRelayBinding>
    </bindings>
    <client>
      <!-- Application Service -->
      <endpoint name="RelayEndpoint" contract="DDMInterface.IBaseService" binding="netTcpRelayBinding" bindingConfiguration="default" address="" />
    </client>

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

<system.serviceModel>

    <bindings>
      <!-- Application Binding -->
      <netTcpRelayBinding>
        <binding name="default" 
                 connectionMode="Hybrid" 
                 maxReceivedMessageSize="2147483647"
                 transferMode="Streamed"
                 closeTimeout="01:00:00"
                 openTimeout="00:30:00"
                 sendTimeout="infinite"
                 receiveTimeout="infinite"
                 maxBufferPoolSize="2147483647" 
                 maxBufferSize="2147483647"
                 maxConnections="500"
                 listenBacklog="200">

          <security mode="None"/>
          <readerQuotas maxBytesPerRead="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" />
          <reliableSession enabled="false" ordered="true" />
        </binding>
      </netTcpRelayBinding>
    </bindings>

    <services>
      <!-- Application Service -->
      <service name="DDMService.DDMBaseService" behaviorConfiguration="ThrottleBehavior">
        <endpoint name="RelayEndpoint"
                  contract="DDMInterface.IBaseService"
                  binding="netTcpRelayBinding"
                  bindingConfiguration="default"
                  address=""/> <!--behaviorConfiguration="defaultBehavior"-->
      </service>
    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="ThrottleBehavior">
          <serviceThrottling maxConcurrentCalls="2147483647" maxConcurrentInstances="2147483647" />
          <!--maxConcurrentSessions="2147483647"-->
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="defaultBehavior">
          <dispatcherSynchronization asynchronousSendEnabled="true"/>
        </behavior>
      </endpointBehaviors>
    </behaviors>

Поведение службы:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple)]
    public class DDMBaseService : IBaseService
    {   

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

1 ответ

Решение

ОБНОВЛЕНИЕ Я пытался отлаживать код все больше и больше и обнаружил, что загрузки действительно работали параллельно, но не отражались в пользовательском интерфейсе. Я исправил эту проблему.

Другие вопросы по тегам