Пользовательский элемент привязки не может быть загружен в WCF под IIS, однако он может загружаться под WCF Self-Host - PullRequest
1 голос
/ 09 мая 2011

Я могу запустить образец WCF-SecureProfile, который поставляется вместе с загруженными образцами MSFT WCF (http://msdn.microsoft.com/en-us/library/ee818238.aspx)

Однако я не могу перенести этот компонент сервера на IIS. Я получаю ошибку, что <MakeConnectionBindingElement/> не может быть загружено. Учитывая то, что у меня загружены расширения поведения, я не знаю, почему IIS не может видеть расширение, однако версия моего приложения с собственным хостом может. enter image description here

Я загрузил исходный код проекта в codeplex для удобного просмотра. Вот прямая ссылка на web.config и все остальные файлы.

enter image description here 2

1 Ответ

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

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

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

После некоторых царапин на голове я нашел причину этой проблемы. WCF 4 теперь назначает привязки по умолчанию для каждого транспорта (мне нравится эта функция все меньше и меньше). Для транспорта HTTP связыванием по умолчанию является basicHttpBinding. Проблема в том, что конфигурация customBinding не переопределяет привязку по умолчанию. Это заставляет WCF пытаться настроить дуплекс через basicHttpBinding, который, конечно, не поддерживается. Исправление состоит в том, чтобы отключить сопоставление транспорта по умолчанию для HTTP и назначить его пользовательской привязке, как показано ниже для этой службы:

    <protocolMapping>
        <clear/> <!-- removes all defaults which you may or may not want. -->
        <!-- If not, use <remove scheme="http" /> -->
        <add scheme="http" binding="customBinding" bindingConfiguration="rspBinding"/>
    </protocolMapping>

Как только я добавил это к элементу serviceModel, служба на основе IIS работала просто отлично.

...