У меня есть решение, содержащее два проекта. Один проект - проект веб-приложения ASP.NET, а один - библиотека классов. Веб-приложение имеет ссылку на проект для библиотеки классов. Ни один из них не имеет строгого имени.
В библиотеке классов, которую я буду называть "Framework", у меня есть поведение конечной точки (реализация IEndpointBehavior) и элемент конфигурации (класс, полученный из BehaviorExtensionsElement). Элемент конфигурации - это то, что я могу прикрепить поведение конечной точки к службе через конфигурацию.
В веб-приложении у меня есть служба WCF с поддержкой AJAX. В web.config у меня есть служба AJAX, настроенная на использование моего пользовательского поведения. Раздел system.serviceModel конфигурации довольно стандартный и выглядит следующим образом:
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="MyEndpointBehavior">
<enableWebScript />
<customEndpointBehavior />
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<services>
<service name="WebSite.AjaxService">
<endpoint
address=""
behaviorConfiguration="MyEndpointBehavior"
binding="webHttpBinding"
contract="WebSite.AjaxService" />
</service>
</services>
<extensions>
<behaviorExtensions>
<add
name="customEndpointBehavior"
type="Framework.MyBehaviorExtensionsElement, Framework, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</behaviorExtensions>
</extensions>
</system.serviceModel>
Во время выполнения это работает отлично. Служба WCF, поддерживающая AJAX, правильно использует мое настраиваемое поведение конечной точки.
Проблема заключается в том, что я пытаюсь добавить новую службу AJAX WCF. Если я добавлю → Новый элемент... и выберите "Служба WCF с поддержкой AJAX", я могу посмотреть, как он добавляет файл .svc и codebehind, но когда он доходит до обновления файла web.config, я получаю эту ошибку:
Конфигурационный файл не является допустимым файлом конфигурации для Библиотеки услуг WCF.
Невозможно загрузить тип "Framework.MyBehaviorExtensionsElement, Framework, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null", зарегистрированный для расширения "customEndpointBehavior".
Очевидно, что конфигурация полностью действительна, так как она отлично работает во время выполнения. Если я временно удалю элемент из моей конфигурации поведения, а затем добавлю службу поддержки WCF с поддержкой AJAX, все пройдет без сбоев.
К сожалению, в более крупном проекте, где у нас будет несколько служб с различными конфигурациями, временное удаление всех пользовательских правил будет подвержено ошибкам. Хотя я понимаю, что могу обойтись без использования мастера и делать все вручную, не каждый может, и было бы неплохо иметь возможность просто использовать продукт, поскольку он предназначался для использования - мастера и все.
Почему мой пользовательский тип расширения поведения WCF не найден?
Обновления/пояснения:
- Он работает во время выполнения, просто не время разработки.
- Сборка Framework находится в папке bin веб-проекта при попытке добавить службу.
- В то время как я мог добавлять сервисы вручную ( "без конфигурации" ), мне нужен готовый шаблон для работы - это целая цель вопроса.
- Эта проблема наблюдается в Visual Studio 2008. В VS 2010 это, как представляется, устранено.
Я зарегистрировал эту проблему в Microsoft Connect, и, оказывается, вам либо нужно добавить свой настраиваемый элемент конфигурации в GAC, либо поместить его в IDE. Они не будут исправлять это, по крайней мере пока. Я опубликовал обходное решение, которое они предоставили в качестве "ответа" на этот вопрос.