Dlaczego nie znaleziono mojego niestandardowego typu elementu rozszerzenia zachowania WCF?
Mam rozwiązanie, które zawiera dwa projekty. Jeden projekt to projekt aplikacji sieci Web ASP.NET, a jeden to biblioteka klas. Aplikacja internetowa ma odwołanie do projektu do biblioteki klas. Żadna z nich nie jest silnie nazwana.
W bibliotece klas, którą nazwiemy „Framework”, mam zachowanie punktu końcowego (implementację IEndpointBehavior) i element konfiguracyjny (klasa pochodząca z BehaviorExtensionsElement). Element konfiguracyjny jest taki, że mogę dołączyć zachowanie punktu końcowego do usługi poprzez konfigurację.
W aplikacji internetowej mam usługę WCF z obsługą AJAX. W web.config mam skonfigurowaną usługę AJAX do korzystania z mojego niestandardowego zachowania. Sekcja system.serviceModel konfiguracji jest dość standardowa i wygląda tak:
<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>
W czasie wykonywania działa to doskonale. Usługa WCF z włączoną obsługą AJAX poprawnie używa mojego niestandardowego skonfigurowanego zachowania punktu końcowego.
Problem polega na tym, że próbuję dodać nową usługę AJAX WCF. Jeśli to zrobię Dodaj -> Nowy element ... i wybierz opcję „Usługa WCF z obsługą AJAX”, mogę oglądać, jak dodaje plik i kod źródłowy .svc, ale gdy dochodzi do aktualizacji pliku web.config, pojawia się ten błąd:
Plik konfiguracyjny nie jest prawidłowym plikiem konfiguracyjnym dla biblioteki usług WCF.
Typ „Framework.MyBehaviorExtensionsElement, Framework, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null” zarejestrowany dla rozszerzenia „customEndpointBehavior” nie mógł zostać załadowany.
Oczywiście konfiguracja jest całkowicie poprawna, ponieważ działa idealnie w czasie wykonywania. Jeśli tymczasowo usunę element z mojej konfiguracji zachowania, a następnie dodasz usługę WCF z obsługą AJAX, wszystko pójdzie bez przeszkód.
Niestety, w większym projekcie, w którym będziemy mieli wiele usług z różnymi konfiguracjami, usunięcie wszystkich niestandardowych zachowań będzie tymczasowo podatne na błędy. Chociaż zdaję sobie sprawę, że mogę iść bez użycia kreatora i robić wszystko ręcznie, nie każdy może, i byłoby miło móc po prostu użyć produktu, który miał być używany - czarodzieje i wszyscy.
Dlaczego nie znaleziono mojego niestandardowego typu elementu rozszerzenia zachowania WCF?
Aktualizacje / wyjaśnienia:
Działa w czasie wykonywania, po prostu nie projektuje czasu.Zespół Framework znajduje się w folderze bin projektu WWW, gdy próbuję dodać usługę.Chociaż mogłem ręcznie dodawać usługi („bez konfiguracji”), potrzebuję gotowego szablonu produktu do pracy - to jest cały cel pytania.Ten problem jest widoczny w programie Visual Studio 2008.W VS 2010 wydaje się, że problem został rozwiązany.Złożyłem ten problem na Microsoft Connect i okazuje się, że albo musisz umieścić niestandardowy element konfiguracji w GAC, albo umieścić go w folderze IDE. Nie naprawią tego, przynajmniej na razie. Opublikowałem obejście, które podali jako „odpowiedź” na to pytanie.