Для контракта требуется дуплекс, но Binding BasicHttpBinding не поддерживает его или не настроен для его поддержки - PullRequest
4 голосов
/ 15 мая 2011

Я следовал этому руководству при создании приложения чата. Когда я пытаюсь добавить ссылку на мой сервис, я получаю следующую ошибку:

Контракт требует дуплекс, но обязательна BasicHttpBinding не поддерживает его или неправильно настроен на поддержать его.

Мой web.config выглядит следующим образом:

<extensions>
  <bindingExtensions>
    <add name="pollingDuplex" type="System.ServiceModel.Configuration.PollingDuplexHttpBindingCollectionElement,System.ServiceModel.PollingDuplex, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </bindingExtensions>
</extensions>

<bindings>      
  <pollingDuplex>
    <binding name="chatPollingDuplex" duplexMode="MultipleMessagesPerPoll"/>
  </pollingDuplex>
</bindings>    

<services>      
  <service name="PrototypeSite.ChatService">        
    <endpoint address="" binding="pollingDuplex" bindingConfiguration="chatPollingDuplex" contract="PrototypeSite.ChatService" />
    <endpoint address="mex" binding="wsDualHttpBinding" contract="IMetadataExchange"/>
  </service>      
</services>

Ответы [ 2 ]

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

Когда я получил эту ошибку, мне было очень больно, но решение было довольно простым - дважды проверьте имя службы в вашем web.config.

где бы вы ни работали в одной и той же веб-сборке или нет, вы должны указать полное имя типа вашей службы

1 голос
/ 15 мая 2011

BasicHttpBinding - это привязка, которая используется в конечной точке по умолчанию - той, которая создается, когда не удается найти элемент, соответствующий имени службы. Атрибут «name» в элементе должен соответствовать полному имени класса обслуживания, что, как я полагаю, не соответствует вашему сценарию.

Если вы используете C #, полное имя будет полным пространством имен + '.' + название класса. Если вы используете VB, возможно, что свойство «корневое пространство имен» проекта добавлено к имени пространства имен. Верный способ узнать имя для использования - использовать инструмент, такой как рефлектор или ildasm, и открыть библиотеку DLL, которая содержит ваш класс обслуживания.

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