InvalidOperationException al crear la instancia del servicio web wcf
-
09-06-2019 - |
Pregunta
Tengo un servicio web WCF al que se hace referencia desde una biblioteca de clases. Después de ejecutar el proyecto, al crear el objeto del cliente de servicio desde una biblioteca de clases, recibo una InvalidOperationException con el mensaje:
No se pudo encontrar el elemento de punto final predeterminado que hace referencia al contrato 'MyServiceReference.IMyService' en el cliente ServiceModel sección de configuración. Esto podría deberse a que no se encontraba ningún archivo de configuración encontrado para su aplicación, o porque no coincide el elemento de punto final Este contrato se puede encontrar en el elemento cliente.
El código que estoy usando para crear la instancia es:
myServiceClient = new MyServiceClient();
de donde MyServiceClient hereda
System.ServiceModel.ClientBase
¿Cómo resuelvo esto?
Nota: Tengo una aplicación de consola separada que simplemente crea el mismo objeto de servicio y realiza llamadas y funciona sin problemas.
Solución
Aquí está mi archivo app.config de la biblioteca de clases:
Debería poner esta configuración en el archivo de configuración de la aplicación principal. La aplicación .NET (que llama a su biblioteca de clases) utiliza datos de su propio archivo de configuración, no del archivo de configuración de su biblioteca.
Otros consejos
O puede establecer el punto final en su código:
http://msdn.microsoft.com/en-us/library/ ms731862.aspx
BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress("http://url-to-service/");
// Create a client that is configured with this address and binding.
MyServiceClient client = new MyServiceClient(binding, address);
Tuve un caso similar. Tenía una biblioteca de clases que llamaba un servicio web, luego tenía un .EXE que llamaba .DLL de class-lib. Creo que se usa el archivo de configuración .EXE y no el de la configuración .DLL.
Pero como dijo Richard anteriormente, tuve que calificar completamente el espacio de nombres. Es un poco doloroso. A continuación se muestra exactamente lo que cambié. El dolor es que tuve que cambiarlo en dos lugares, uno en la referencia.cs que se genera cuando crea una referencia de servicio, y el otro en el archivo de configuración. Por lo tanto, cada vez que cambio el servicio web y hago un & Quot; Actualizar referencia & Quot; Tengo que hacer el cambio al código C # nuevamente.
1) En realidad, debe cambiar el ConfigurationName en reference.cs de la siguiente manera:
De: [System.ServiceModel.ServiceContractAttribute(Namespace = "http://TFBIC.RCT.BizTalk.Orchestrations", ConfigurationName = " RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations")]
Para: [System.ServiceModel.ServiceContractAttribute(Namespace = "http://TFBIC.RCT.BizTalk.Orchestrations", ConfigurationName = "TFBIC.RCT.HIP.Components.RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations")]
2) y luego también cambie el & # 8220; contrato & # 8221; valor en todos los app.config relacionados (para .dll & # 8217; sy .exe & # 8217; s) de la siguiente manera:
De: