使用WCF serviceModel for Addin VS2008的ConfigurationErrorsException

时间:2010-12-07 15:27:09

标签: c# visual-studio-2008 wcf add-in configuration-files

我有一个DLL(vs2008中的库项目),它调用外部Web服务。 Project具有对外部Web服务的服务引用

我在单元测试项目中有单元测试和app.config(带有servicemodel配置),一切都是正确的。

现在,我使用Addin VS 2008,并且没有像Windows Forms或Asp.net这样的配置文件。 addin是一个DLL,它有配置文件。

如果我使用WCF(使用我的项目DLL),则找不到config system.servicemodel

我见过这个: http://vassiltonev.blogspot.com/2009/03/loading-custom-config-file-instead-of.html

但添加自定义wcf行为扩展会导致ConfigurationErrorsException

  

无法加载为扩展名'customTextMessageEncoding'注册的类型'Microsoft.ServiceModel.Samples.CustomTextMessageEncodingElement,CalidadCodigo.Integracion.CustomTextEncoder'。 (E:\ TFS \ pro \ AddIn \ bin \ Debug \ MyAddIn.dll.config第123行

我在我的扩展WCF中使用Assembly QualifiedName进行测试但是错误。

更多建议或任何示例代码?

我的配置

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

</extensions>

代码

    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)


                }
            }

1 个答案:

答案 0 :(得分:1)

AFAIK无法在DLL中使用ConfigurationManager。我在编写VS2010的插件时遇到了同样的问题。

我的解决方案是从文件加载设置,在我自己的代码中创建端点和endpointadress,如下所示:

Uri myUri = loadUriFromFile();

var endpoint = new EndpointAddress(myUri); 

NetTcpBinding binding = GetNewTcpBindingFromFile(); 

return new WebServicePortTypeClient(binding, endpoint);