У меня есть решение, которое содержит два проекта. Один проект - это проект веб-приложения 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 и код, но когда он обновляет файл web.config, я получаю эту ошибку:
Файл конфигурации не является допустимым файлом конфигурации для библиотеки служб WCF.
Тип 'Framework.MyBehaviorExtensionsElement, Framework, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null', зарегистрированный для расширения 'customEndpointBehavior', не может быть загружен.
Очевидно, что конфигурация полностью действительна, поскольку она отлично работает во время выполнения. Если я временно удаляю элемент из своей конфигурации поведения, а затем добавляю службу WCF с поддержкой AJAX, все проходит без проблем.
К сожалению, в более крупном проекте, где у нас будет несколько служб с различными конфигурациями, временное удаление всех пользовательских поведений будет подвержено ошибкам. Хотя я понимаю, что могу обойтись без мастера и сделать все вручную, не все могут, и было бы неплохо иметь возможность использовать продукт в том виде, в котором он предназначен - мастера и все такое.
Почему не найден мой пользовательский тип элемента расширения поведения WCF?
Обновления / пояснения:
- Он работает во время выполнения, но не во время проектирования.
- Сборка Framework находится в папке bin веб-проекта, когда я пытаюсь добавить службу.
- Хотя я мог бы добавить службы вручную («без конфигурации»), мне нужен готовый шаблон элемента для работы - вот и вся цель вопроса.
- Эта проблема видна в Visual Studio 2008. В VS 2010 эта проблема, похоже, решена.
Я подал эту проблему в Microsoft Connect , и оказывается, что вы должны либо поместить свой пользовательский элемент конфигурации в GAC, либо поместить его в папку IDE. Они не будут это исправлять, по крайней мере пока. Я разместил обходной путь, который они предоставили в качестве «ответа» на этот вопрос.