2010-07-02 17 views
1

J'ai récemment essayé de migrer les bibliothèques NServiceBus vers le GAC car elles sont assez volumineuses et nécessaires dans presque tous mes logiciels. J'utilise le plus récent .NET 4.0 Build (2.0.0.1219) et j'ai utilisé GACUTIL pour copier NServiceBus & NServiceBus.Core dans le nouveau GAC et log4net dans l'ancien 2.0 GAC. J'ai réussi à faire fonctionner log4net en câblant dans la version et PublicKeyToken mais je ne peux pas faire fonctionner le NServiceBus.Core. Chaque fois que je démarre un logiciel, j'obtiens l'erreur suivante:Bus NService et le GAC

"Le type NServiceBus.Unicast.Transport.CompletionMessage n'a pas été enregistré dans le sérialiseur Vérifiez qu'il apparaît dans la liste des assemblys/types configurés à analyser."

Lorsque je copie la DLL NServiceBus.Core dans le dossier local, cela fonctionne correctement.

ma config ressemble à ceci:

<configSections> 
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core, Version=2.0.0.1219, Culture=neutral, PublicKeyToken=9fc386479f8a226c" /> 
<section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core, Version=2.0.0.1219, Culture=neutral, PublicKeyToken=9fc386479f8a226c" /> 
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821" /> 
<sectionGroup name="common"> 
    <section name="logging" type="Common.Logging.ConfigurationSectionHandler, NServiceBus.Core, Version=2.0.0.1219, Culture=neutral, PublicKeyToken=9fc386479f8a226c"/> 
</sectionGroup> 

Je me demande donc a quelqu'un d'autre a NServiceBus travaillé avec succès avec le GAC?

Vive

Répondre

1

NServiceBus scanne les ensembles dans un répertoire (le répertoire d'exécution d'une application, le répertoire compilé du site pour une application Web) afin de charger tous les gestionnaires de messages, et cela signifie qu'il a besoin de scanner lui-même ainsi pour tous les types dont il a besoin pour l'injection de dépendance. Je ne suis pas sûr que ce modèle supporte les assemblages vivant dans le GAC par défaut, bien que si vous configurez NServiceBus vous-même, vous pouvez spécifier les assemblys pour charger vous-même à travers le NServiceBus.Configure.With (params Assembly [] assembly), assurez-vous d'inclure tous les assemblys NServiceBus et Log4Net à tout le moins.

Cependant, je soutiens que GAC-ING les assemblages de NSB pourrait ne pas être la meilleure idée. Chaque point de terminaison ayant sa propre copie de l'assembly renforce l'autonomie des points de terminaison et facilitera grandement la mise à niveau vers une nouvelle version de NServiceBus, car vous pourrez tester chaque point de terminaison individuellement et pas seulement nouvelle assemblée dans le GAC, ajouter une redirection de liaison, et espérons que tout continue à bien fonctionner.

+0

J'ai essayé référencer le répertoire des ensembles avec pas de chance. Je comprends que chaque logiciel ayant sa propre copie du DDL serait la meilleure approche, mais j'ai affaire à beaucoup de logiciels sur plusieurs machines différentes qui commencent à devenir une grosse tâche à gérer. Surtout en tant que gros fichier par rapport à tous les autres logiciels. –

+0

L'erreur que je reçois maintenant est: Spring.Core.TypeMismatchException: Impossible de convertir la valeur de propriété de type [System.Collections.Hashtable] au type requis [System.Collections.IDictionary] pour la propriété 'MessageOwners' –

+0

Bizarre. Je serais intéressé de voir la trace de la pile sur celle-là. –

2

NServiceBus supprime les noms forts avec un problème. Utilisez l'élément <runtime> dans web.config:

<runtime> 
    <qualifyAssembly partialName="MessagesDll" fullName="MessagesDll, Version=1.0.0.0, Culture=neutral, PublicKeyToken=4d476a51357cea5c" />