Ajuste de la configuración Encuadernación y punto final en el código es una manera, pero hay otra manera de utilizar la DLL del consumidor y dejar que la estancia en el archivo de configuración App.config existente.
La razón por la que el InvalidOperationException se produce es porque el archivo DLL no contiene la configuración de configuración. Siempre confía en App.config para proporcionarlo, pero como está utilizando el DLL en otra aplicación de consola, no encuentra la configuración.
Cuando utilizamos el cuadro de diálogo "Agregar referencia de servicio" para agregar el servicio web al componente del cliente y crear una instancia del servicio web, dejamos que Visual Studio maneje la creación del canal de comunicación y cargue la configuración de configuración. podemos crear dicho canal explícitamente a nosotros mismos y luego podemos administrar los ajustes de configuración.
Microsoft ofrece clases para este propósito, ConfigurationChannelFactory<TChannel>
Clase es uno. Estados de MSDN:
Proporciona la funcionalidad genérica para crear un elemento de configuración de canal para un tipo específico.
El ConfigurationChannelFactory permite la gestión central de configuración de cliente WCF.
Uso de diálogo "Agregar referencia de servicio" para agregar el servicio web al componente de cliente, ya que necesitamos la instancia de interfaz de canal de servicio.
En primer lugar cambiar el nombre del generada App.config archivo a App.dll.config y en sus propiedades del archivo cambiar el Copiar al Directorio de salida propiedad a Copiar siempre
Crear una clase que tiene un método que devuelve el objeto Canal para acceder al servicio web, como este:
public class ManageService
{
public static T CreateServiceClient<T>(string configName)
{
string _assemblyLocation = Assembly.GetExecutingAssembly().Location;
var PluginConfig = ConfigurationManager.OpenExeConfiguration(_assemblyLocation);
ConfigurationChannelFactory<T> channelFactory = new ConfigurationChannelFactory<T>(configName, PluginConfig, null);
var client = channelFactory.CreateChannel();
return client;
}
}
Como hemos establecido la propiedad Copiar siempre VS copia la DLL del proyecto, así como la App.dll.config en la carpeta bin. Assembly.GetExecutingAssembly().Location
devolver la ubicación de montaje y ConfigurationManager.OpenExeConfiguration
abre el archivo de configuración del cliente especificada como un objeto de configuración.
PluginConfig
contiene el archivo de configuración de objetos app.config y ConfigurationChannelFactory<T>
lo utiliza para comunicarse con el servicio.
Este método puede ser invocado por los que pasa el objeto de interfaz de canal de servicio como esto:
Client = ManageService.CreateServiceClient<SampleService.IKeyServiceChannel>("MetadataExchangeTcpBinding_IKeyService");
SampleService
es el espacio de nombres de mi servicio web. Client
contiene la instancia del servicio web.
Si necesita manejar Comunicación dúplex y devoluciones de llamada, entonces puede mirar ConfigurationDuplexChannelFactory<TChannel>
Class.
posible duplicado de [InvalidOperationException al crear la instancia del servicio web wcf] (http://stackoverflow.com/questions/24993/invalidoperationexception-while-creating-wcf-web-service-instance) –
En pocas palabras: Esas configuraciones de configuración desde el componente debe copiarse a ConsoleApplication1.exe.config –
@Josh que no funcionará en mi caso. No mencioné esto en mi pregunta, pero esta .NET DLL se llamará desde una aplicación VB6 COM, por lo que el componente .NET que estoy escribiendo tiene que poder llamar al servicio web sin tener que depender de nada de la aplicación consumidora –