Почему не найден мой пользовательский тип элемента расширения поведения WCF?
У меня есть решение, которое содержит два проекта. Один проект - это проект веб-приложения 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. Они не будут это исправлять, по крайней мере пока. Я разместил обходной путь, который они предоставили в качестве «ответа» на этот вопрос.