Пользовательский элемент привязки не может быть загружен в WCF под IIS, однако он может загружаться под WCF Self-Host
Я могу запустить образец WCF-SecureProfile, который поставляется вместе с загруженными образцами MSFT WCF ( http://msdn.microsoft.com/en-us/library/ee818238.aspx)
Однако я не могу портировать этот серверный компонент на IIS. Я получаю ошибку, что<MakeConnectionBindingElement/>
не может быть загружен. Учитывая то, что у меня загружены расширения поведения, я не знаю, почему IIS не может видеть расширение, однако версия моего приложения с собственным хостом может.
Я загрузил исходный код проекта в codeplex для удобного просмотра. Вот прямая ссылка на web.config и все остальные файлы.
1 ответ
Я получил образец и настроил его для работы на 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 работала просто отлично.