2010-12-07 38 views
0

J'ai une DLL (projet de bibliothèque dans vs2008), qui appelle au service Web externe. Le projet a une référence de service au service web externeConfigurationErrorsException utilisant WCF serviceModel pour Addin VS2008

J'ai le test d'unité, et app.config (avec la configuration de service) dans le projet de test d'unité, et tout est bon. Maintenant, j'utilise Addin VS 2008, et n'ai pas de fichier de configuration comme Windows Forms ou Asp.net. l'addin est une DLL et il a un fichier de configuration.

Si j'utilise WCF (en utilisant mon DLL de projet), la configuration system.serviceModel pas trouvé

Je l'ai vu: http://vassiltonev.blogspot.com/2009/03/loading-custom-config-file-instead-of.html

mais Ajout d'une extension de comportement WCF personnalisé provoque une ConfigurationErrorsException

Le type 'Microsoft.ServiceModel.Samples.CustomTextMessageEncodingElement, CalidadCodigo.Integracion.CustomTextEncoder' enregistré pour l'extension 'customTextMessageEncoding' n'a pas pu être chargé. (E: \ TFS \ pro \ AddIn \ bin \ Debug \ MyAddIn.dll.config ligne 123

je teste l'Assemblée QualifiedName dans mes extensions WCF, mais mal

suggestions plus ou tout autre exemple de code. ?

ma config

<extensions> 
    <bindingElementExtensions> 
    <add name="customTextMessageEncoding" 
     type="Microsoft.ServiceModel.Samples.CustomTextMessageEncodingElement,CalidadCodigo.Integracion.CustomTextEncoder, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> 
    </bindingElementExtensions> 

</extensions> 

Le code

internal static WebServicePortTypeClient CrearClienteWCF() 
      { 
       try 
       { 
        return new WebServicePortTypeClient(); 
       } 
       catch (Exception ex) 
       { 

        //TODO: not found serviceModel config 

var addInConfig = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Reflection.Assembly.GetExecutingAssembly().Location); 


       var endpointAddress = addInConfig.AppSettings.Settings[EasyVistaSvcEndPointAddress].Value; 
       var endpoint = new System.ServiceModel.EndpointAddress(endpointAddress); 

       return new WebServicePortTypeClient(EndPointConfigurationName, endpoint); 

       // The type 'Microsoft.ServiceModel.Samples.CustomTextMessageEncodingElement, CalidadCodigo.Integracion.CustomTextEncoder' registered for extension 'customTextMessageEncoding' could not be loaded. (E:\TFS\pro\AddIn\bin\Debug\MyAddIn.dll.config line 123) 


       } 
      } 

Répondre

1

AFAIK il n'est pas possible d'utiliser le ConfigurationManager dans une DLL. J'ai couru dans le même numéro pendant que j'écrivais un plugin pour VS2010.

Ma solution a été de charger les paramètres d'un fichier un point final et créer le endpointadress par moi-même dans le code comme ceci:

Uri myUri = loadUriFromFile(); 

var endpoint = new EndpointAddress(myUri); 

NetTcpBinding binding = GetNewTcpBindingFromFile(); 

return new WebServicePortTypeClient(binding, endpoint); 
+0

Comment créer CustomBinding et extensions ?? programatically – Kiquenet

+0

Vous pouvez regarder le code XML généré par le studio visuel dans le fichier app.config pour le service wcf. Que l'objet sérialisé il est facile de voir quelle propriété vous devez remplir. – Kolja