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.

¿Fue útil?

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:

< endpoint address =

Probablemente ayudaría si publicara su 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: intente calificar completamente el valor de su contrato; usa el espacio de nombres completo. Creo que eso es necesario.

scroll top