visual studio net example ejemplo crear consumir .net wcf web-services

.net - studio - InvalidOperationException al crear una instancia del servicio web wcf



web service c# visual studio 2017 (4)

Aquí está mi archivo app.config de la biblioteca de clases:

Debe poner esta configuración de configuración en el archivo de configuración de la aplicación principal. La aplicación .NET (que está llamando a tu biblioteca de clase) usa datos de su propio archivo de configuración, no del archivo de configuración de tu biblioteca.

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 de cliente de servicio desde dentro de una biblioteca de clase, recibo una InvalidOperationException con un mensaje:

No se pudo encontrar el elemento de punto final predeterminado que hace referencia al contrato ''MyServiceReference.IMyService'' en la sección de configuración del cliente de ServiceModel. Esto podría deberse a que no se encontró ningún archivo de configuración para su aplicación, o porque no se pudo encontrar ningún elemento de punto final que coincida con este contrato en el elemento del cliente.

El código que estoy usando para crear la instancia es:

myServiceClient = new MyServiceClient();

donde MyServiceClient hereda de

System.ServiceModel.ClientBase

¿Cómo puedo solucionar esto?

Nota: Tengo una aplicación de consola separada que simplemente crea el mismo objeto de servicio y hace llamadas a él y funciona sin problemas.


Probablemente sería útil si publicaste tu archivo app.config, ya que este tipo de error tiende a señalar un problema en el bloque <endpoint> . Asegúrese de que el atributo del contrato le parezca correcto.

Editar: pruebe completamente el valor de su contrato; usa el espacio de nombre completo Creo que eso es necesario.


Tuve un caso similar. Tenía una biblioteca de clases que llamaba a un servicio web, luego tenía un .EXE que llamaba al .DLL de la clase-lib. Creo que es el archivo de configuración .EXE que se usa 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 Debajo está exactamente lo que cambié. El problema es que tuve que cambiarlo en dos lugares, uno en la referencia.cs que se genera cuando se 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 una "Actualización de referencia", tengo que hacer el cambio al código C # nuevamente.

1) En realidad, debe cambiar ConfigurationName en la referencia.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 valor de "contrato" en todos los app.config relacionados (para los archivos .dll y .exe) de la siguiente manera:

De:

<dirección de punto final = http://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svc vinculante = "wsHttpBinding" bindingConfiguration = contrato "WSHttpBinding_ITwoWayAsync" = "RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations" name = "WSHttpBinding_ITwoWayAsync ">

A:

<dirección de punto final = http://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svc binding = "wsHttpBinding" bindingConfiguration = "WSHttpBinding_ITwoWayAsync" contract = "TFBIC.RCT.HIP.Components. RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations "name =" WSHttpBinding_ITwoWayAsync ">

Para ser claros, ¿cómo sabía cuál era el espacio de nombre completo? El espacio de nombre del programa era TFBIC.RCT.HIP. Dentro de eso, el código C # tiene una declaración de espacio de nombres adicional:

namespace RCTHipComponents


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);