Pourquoi ce n'est pas ma coutume WCF comportement extension type d'élément trouvé?
J'ai une solution qui contient deux projets. Un projet est un ASP.NET Projet d'Application Web, et l'autre est une bibliothèque de classe. L'application web a un projet de référence pour la bibliothèque de classe. Aucune de ces est fortement nommé.
Dans la bibliothèque de classe, que je vais appeler "Cadre de," je avoir un comportement de point de terminaison (un IEndpointBehavior mise en œuvre) et un élément de configuration (une classe dérivée de BehaviorExtensionsElement). L'élément de configuration est si je peux joindre le comportement de point de terminaison à un service via la configuration.
Dans l'application web, j'ai un AJAX service WCF. Dans le web.config, j'ai l'AJAX de service configuré pour utiliser mon comportement personnalisé. Le système.serviceModel section de la configuration est assez classique et ressemble à ceci:
<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>
Au moment de l'exécution, cela fonctionne parfaitement. L'AJAX service WCF utilise correctement mes personnalisé configuré comportement de point de terminaison.
Le problème est que lorsque j'essaie d'ajouter une nouvelle AJAX service WCF. Si je dois Ajouter -> Nouveau Point... " et sélectionnez "AJAX Service WCF," je peux le regarder ajouter l' .svc fichier et le code-behind, mais quand il arrive à la mise à jour sur le web.fichier de config, j'ai cette erreur:
Le fichier de configuration n'est pas valide d'un fichier de configuration pour le Service WCF Bibliothèque.
Le type de Cadre.MyBehaviorExtensionsElement, Framework, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null', enregistré pour l'extension 'customEndpointBehavior' n'a pas pu être chargé.
Évidemment, la configuration est tout à fait valable, car il fonctionne parfaitement lors de l'exécution. Si je supprime l'élément de mon comportement de configuration temporaire, puis ajouter l'AJAX Service WCF, tout se passe sans accroc.
Malheureusement, dans un projet plus vaste où nous aurons de multiples services avec différentes configurations, de supprimer tous les comportements personnalisés temporairement va être sujettes à erreur. Alors que je me rends compte que je pouvais aller sans l'aide de l'assistant et de tout faire manuellement, tout le monde ne peut, et il serait agréable d'être en mesure d'utiliser le produit comme il est destiné à être utilisé - assistants et tous.
Pourquoi ce n'est pas ma coutume WCF comportement extension type d'élément trouvé?
Mises à jour/précisions:
- Il fonctionne au moment de l'exécution, tout simplement pas le temps de conception.
- Le Cadre de l'assemblée est dans le web dossier bin du projet lorsque je tente d'ajouter le service.
- Alors que je pouvais ajouter des services manuellement ("sans configuration"), j'ai besoin de l'out-of-the-box modèle d'élément de travail - c'est le but de la question.
- Ce problème dans Visual Studio 2008. Dans VS 2010, ce qui semble être résolu.
J'ai déposé cette question sur Microsoft Connect et il s'avère que vous avez de mettre votre configuration personnalisée de l'élément dans le cas ou le mettre dans l'IDE dossier. Ils ne seront pas en la fixant, au moins pour l'instant. J'ai posté la solution qu'ils ont fournis comme la "réponse" à cette question.
Vous devez vous connecter pour publier un commentaire.
Par la solution de contournement que Microsoft a publié sur la question de connexion j'ai déposé pour cela, c'est un problème connu et il n'y aura pas de solution pour elle, au moins dans la version actuelle:
Malheureusement, il semble que je suis hors de la chance sur ce coup.
J'ai simplement utilisé
Donc, j'ai une nouvelle assemblée numéro de version à chaque fois.
Mais nous avons
où Version=1.0.0.0 C'EST FAUX!!!
Si vous avez 2 options
Retour à
Chaque génération remplacer manuellement Version=1.0.0.0 avec un nombre correct.
Comme un avis de quelqu'un qui bute sur ce ces jours-ci une solution possible est d'obtenir votre assemblée dans votre application.config/web.config.
Par exemple
si vous aviez
essayer de remplacer les valeurs que necassary
cette solution a fonctionné pour moi.
platform=MSIL
de la FQNJ'ai essayé cela avec un nouveau projet juste pour s'assurer qu'il n'était pas à votre projet/config et a eu exactement le même problème.
À l'aide de la fusion des journaux, il semble que le système recherche le comportement des extensions dans le répertoire IDE (C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE). La copie de l'assemblée à ce répertoire dans une étape de post-construction fonctionne, mais c'est laid.
Avez-vous une copie de Framework.dll avec votre comportement personnalisé dans le répertoire bin de votre projet web? Si pas c'est probablement le problème. Visual Studio est à la recherche pour la mise en œuvre du comportement. Depuis qu'il est indiqué dans votre config il ne pense pas à la regarder dans les autres projets; il s'attend à trouver l'assemblée à la poubelle.
En fonction de votre projet d'installation, il peut être en mesure d'exécuter dans le debug sans cette assemblée d'être mis à la poubelle, bien que VS généralement construit et met là. Mais encore une fois, cela dépend de la façon dont les choses sont de l'installation.
De toute façon, pourriez juste voulez vérifier que le montage est disponible au moment de la conception.
Voici la liste des étapes a fonctionné pour moi:
Tous ensemble seulement.
Mettre l'assembly dans le GAC serait probablement aider, mais j'apprécie ce n'est pas la réponse que vous cherchez. Vous ne savez pas où d'autre VS va chercher les assemblées en dehors de la GAC et le répertoire contenant devenv.exe.
J'ai résolu ce problème en commentant les articles pertinents du web.config, y compris l'élément qui a utilisé l'extension personnalisée, l'élément et l'élément.
Après que j'ai été en mesure d'ajouter un service WCF pour le projet, ajoutez les lignes de retour dans le web.config et publier le projet.
si vous utilisez un framework 3.5 Culture=neutral dans les petits pas de la Culture=Neutral CAPITAL
J'ai eu l'extension de classe au sein du même projet (dll) que ma classe de service et ne pouvait pas le faire fonctionner. Une fois que je l'ai déplacé à un autre projet et de le référencer à partir du projet de service, il a travaillé. Juste au cas où quelqu'un d'autre s'exécute sur cette question.