Por que o tipo de elemento de extensão de comportamento do WCF personalizado não está sendo encontrado?
Eu tenho uma solução que contém dois projetos. Um projeto é um projeto de aplicativo da Web do ASP.NET e um é uma biblioteca de classes. O aplicativo da web possui uma referência de projeto para a biblioteca de classes. Nenhum destes é fortemente nomeado.
Na biblioteca de classes, que chamarei de "Framework", tenho um comportamento de terminal (uma implementação IEndpointBehavior) e um elemento de configuração (uma classe derivada de BehaviorExtensionsElement). O elemento de configuração é para que eu possa anexar o comportamento do terminal a um serviço por meio da configuração.
No aplicativo da web, tenho um serviço WCF habilitado para AJAX. No web.config, tenho o serviço AJAX configurado para usar meu comportamento personalizado. A seção system.serviceModel da configuração é bem padrão e se parece com isso:
<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>
Em tempo de execução, isso funciona perfeitamente. O serviço WCF habilitado para AJAX usa corretamente meu comportamento de ponto de extremidade configurado personalizado.
O problema é quando tento adicionar um novo serviço AJAX WCF. Se eu adicionar -> Novo Item ... e selecionar "Serviço WCF habilitado para AJAX", posso vê-lo adicionar o arquivo .svc e codebehind, mas quando atualizar o arquivo web.config, recebo este erro:
O arquivo de configuração não é um arquivo de configuração válido para o WCF Service Library.
O tipo 'Framework.MyBehaviorExtensionsElement, Framework, Versão = 1.0.0.0, Culture = neutral, PublicKeyToken = null' registrado para extensão 'customEndpointBehavior' não pôde ser carregado.
Obviamente, a configuração é totalmente válida, pois funciona perfeitamente em tempo de execução. Se eu remover o elemento da minha configuração de comportamento temporariamente e, em seguida, adicionar o Serviço WCF habilitado para AJAX, tudo ocorrerá sem problemas.
Infelizmente, em um projeto maior em que teremos vários serviços com várias configurações, a remoção de todos os comportamentos personalizados temporariamente será propensa a erros. Enquanto eu percebo que eu poderia ir sem usar o assistente e fazer tudo manualmente, nem todo mundo pode, e seria bom poder apenas usar o produto como ele deveria ser usado - assistentes e tudo.
Por que o tipo de elemento de extensão de comportamento do WCF personalizado não está sendo encontrado?
Atualizações / esclarecimentos:
Ele funciona em tempo de execução, mas não no tempo de design.O assembly do Framework está na pasta bin do projeto da Web quando tento adicionar o serviço.Embora eu possa adicionar serviços manualmente ("sem configuração"), preciso que o modelo de item pronto para uso funcione - esse é o objetivo da pergunta.Esse problema está sendo visto no Visual Studio 2008.No VS 2010, isso parece estar resolvido.Eu arquivei este problema no Microsoft Connect e você precisa colocar seu elemento de configuração personalizado no GAC ou colocá-lo na pasta IDE. Eles não vão consertar isso, pelo menos por enquanto. Eu publiquei a solução alternativa que eles forneceram como a "resposta" a essa pergunta.