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