timeoutexception или ограничение соединения по умолчанию на wcf? - PullRequest
3 голосов
/ 04 декабря 2011

Сначала я запустил своего подписчика на службу WCF и приступил к публикации публикации от моего издателя. Мой подписчик может получить сообщение.

Во-вторых, я закрыл своего первого подписчика и снова открыл его, чтобы подписаться на ту же услугу, которая называется так называемым ВТОРОМ подписчиком, подписавшимся на услугу. И еще раз, он может получать сообщения.

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

Сообщение не может быть передано в течение отведенного времени: 00:01:00. В окне передачи надежного канала не было свободного места. Время, отведенное для этой операции, могло быть частью более длительного времени ожидания.

Резюме:

  1. На первом клиенте, ПОДПИСАНО, все отлично работает
  2. закрывает первый клиент
  3. На бесшумном СНОВА (имеется ввиду второе соединение на том же сервисе (?)) Все отлично работает
  4. Закрывает "второй клиент"
  5. Открывает клиент ТРЕТЬЕ время, возникает ошибка

Из того, что я исследовал до сих пор, я видел, что в этом вопросе упоминается, что предел соединения по умолчанию равен 2?

Регулирование службы WCF

Это проблема, которая вызывает мою ошибку? Если да, можно ли настроить ограничение соединения и как?

Довольно новенький в области WCF и приветствую любого, кто выскажет мне свое мнение. Спасибо!

EDIT

Попробовал использовать UseSynchronizationContext = false на моем клиенте. Поскольку каждый раз, когда отправляется сообщение, мой метод PostReceived () для моего подписчика включает в себя открытие всплывающей формы окна, содержащей информацию о публикации. При использовании UseSynchronizationContext = false форма окна не сможет правильно открыться (ошибка здесь).

У кого-нибудь есть идеи, как это исправить, или есть альтернативные решения?

РЕДАКТИРОВАТЬ 2

Читал много материалов, связанных с WCF-подключением, и обнаружил, что большинство людей пытаются переключить переменную maxConnections или связанные с ними в своих конфигурационных файлах. Мой вопрос - единственные файлы конфигурации, которые у меня есть, находятся в моем клиенте и ни один для моего Сервисного проекта Нужно ли мне добавлять конфигурационный файл для моего сервисного проекта?

Поскольку «предел подключения» (?) Равен 2, я попытался отменить его, когда клиент выходит из приложения, но это не работает и выдает ошибку. Я отправил вопрос об ошибке, которую получил.

https://stackoverflow.com/questions/8395525/objectdisposedexception-on-wcf-service

Добавлены коды конфигурации для клиентской стороны:

<system.serviceModel>
  <diagnostics performanceCounters="All" />
  <bindings>
    <wsDualHttpBinding>
      <binding name="WSDualHttpBinding_IPostingContract" clientBaseAddress="http://localhost:8000/wcfClient/" closeTimeout="00:01:00"
          openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
          bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
          maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
          messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true">
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384"  />
        <reliableSession ordered="true" inactivityTimeout="00:10:00" />
        <security mode="Message">
          <message clientCredentialType="Windows" negotiateServiceCredential="true"
              algorithmSuite="Default" />
        </security>
      </binding>
    </wsDualHttpBinding>
  </bindings>

  <client>
    <endpoint address="http://localhost:8888/PostingContract/Posting"
        binding="wsDualHttpBinding" bindingConfiguration="WSDualHttpBinding_IPostingContract"
        contract="IPostingContract" name="WSDualHttpBinding_IPostingContract">
      <identity>
        <userPrincipalName value="##" />
      </identity>
    </endpoint>
  </client>

</system.serviceModel>

Кто-нибудь посоветует мне, если я сделал что-то не так для моей служебной части в отношении поведения или файлов конфигурации. Цените миллион. Спасибо!

РЕДАКТИРОВАТЬ 3

Управляйся служебным поведением. Для поведения я изменил InstanceContextMode на одиночный.

InstanceContextMode = InstanceContextMode.Single

и это фактически позволило мне запустить более 2 подключений моего приложения Windows Form. Однако, если я это сделаю, если я предварительно запустил 2 соединения, для третьего соединения он получит 3 всплывающих окна, а затем для четвертого соединения - 4. Когда предполагается получить 1.

1 Ответ

3 голосов
/ 04 декабря 2011

поможет ли это добавить UseSynchronizationContext = false в клиентском классе подписчика

, например,

[CallbackBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant,
UseSynchronizationContext = false)]

Причина может быть в том, что здесь есть аналогичная запись обратного вызова WCF: Наличиепроблема с односторонними обратными вызовами

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