Agregué un proxy a un servicio web a una solución VS2008 / .NET 3.5. Al construir el cliente .NET arroja este error:
No se pudo encontrar el elemento de punto final predeterminado que hace referencia al contrato 'IMySOAPWebService' en la sección de configuración del cliente ServiceModel. Esto puede deberse a que no se encontró un 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 cliente.
La búsqueda de este error me dice que use el espacio de nombres completo en el contrato. Aquí está mi app.config con espacio de nombres completo:
<client>
<endpoint address="http://192.168.100.87:7001/soap/IMySOAPWebService"
binding="basicHttpBinding" bindingConfiguration="IMySOAPWebServicebinding"
contract="Fusion.DataExchange.Workflows.IMySOAPWebService" name="IMySOAPWebServicePort" />
</client>
Estoy ejecutando XP local (menciono esto porque varios éxitos de Google mencionan win2k3) La aplicación.config se copia en app.exe.config, por lo que tampoco es el problema.
¿Alguna pista?
fuente
Respuestas:
"Este error puede surgir si está llamando al servicio en una biblioteca de clases y llamando a la biblioteca de clases desde otro proyecto".
En este caso, deberá incluir los ajustes de configuración de WS en los principales proyectos app.config si es una winapp o web.config si es una aplicación web. Este es el camino a seguir incluso con PRISM y WPF / Silverlight.
fuente
ServiceReferences.ClientConfig
se genera en el directorio del proyecto. Copiar los elementos<bindings>
y<client>
del archivo de mi biblioteca a mi aplicación principal (que antes estaban vacías) hizo que todo funcionara.Resolví esto (creo que como otros podrían haber sugerido) creando las instancias de enlace y dirección de punto final yo mismo, porque no quería agregar nuevas configuraciones a los archivos de configuración (esto es un reemplazo para algún código de biblioteca existente que se usa ampliamente, y anteriormente usaba una referencia de servicio web anterior, etc.), por lo que quería poder agregar esto sin tener que agregar nuevas configuraciones de configuración en todas partes.
Editar
Si está usando https, entonces necesita usar en
BasicHttpsBinding
lugar deBasicHttpBinding
.fuente
Después de probar varias opciones, finalmente resolví esto usando
es decir, sin el espacio de nombres completo en la configuración. Por alguna razón, el nombre completo no se resolvió correctamente
fuente
var proxy = new ExternalServices.ServiceClient("MyServiceEndpoint");
funcionar cuando agregué el espacio de nombres para contratar:contract="ExternalServices.IMyService"
He tenido este mismo problema. Resulta que para una REFERENCIA web, debe proporcionar la URL como primer parámetro al constructor:
Para un nuevo estilo de REFERENCIA DE SERVICIO web, debe proporcionar un nombre que haga referencia a una entrada de punto final en la configuración:
Con una entrada correspondiente en
Web.config
oApp.config
:Bastante difícil de eliminar la visión del túnel en "funcionó en un programa anterior" ...
fuente
Tuve una situación como esta, donde tuve
Ahora el proyecto Consumer tenía todos los ajustes de configuración relacionados en
<system.serviceModel>
Tag de mi app.config, todavía arrojaba el mismo error que el anterior.Todo lo que hice fue agregar la misma etiqueta
<system.serviceModel>
al archivo app.config de mi proyecto principal, y finalmente estuvimos listos.El verdadero problema, en lo que respecta a mi caso, era leer el archivo de configuración incorrecto. En lugar de app.config del consumidor, se refería a la configuración principal del proyecto. Me tomó dos horas resolver eso.
fuente
<system.serviceModel>
en su biblioteca, luego cópielo en la aplicación principal.config de su aplicación. Solo otro síntoma de que la biblioteca de clases app.configs no se lee en tiempo de ejecución. Paso muchísimo tiempo compensando este descuido (OMI). Si quiero que la biblioteca lea su configuración desde su app.config, déjalo. De lo contrario, ¿por qué tener una app.config para bibliotecas de clases en primer lugar?Sí, pero si no puede cambiar el proyecto principal (Orchard CMS, por ejemplo), puede mantener la configuración del servicio WCF en su proyecto.
Debe crear un asistente de servicio con el método de generación de clientes:
y úsalo:
Ver detalles en este artículo .
fuente
Varias respuestas aquí dan con la solución correcta cuando te enfrentas al error de la referencia al servicio desde un archivo de clase: copia la información de configuración del servicio en tu app.config web.config de tu consola o aplicación de Windows. Sin embargo, ninguna de esas respuestas parece mostrarte qué copiar. Intentemos corregir eso.
Esto es lo que copié del archivo de configuración de mi biblioteca de clases, en el archivo de configuración de la aplicación de mi consola, para evitar este loco error para un servicio que escribo llamado "TranslationServiceOutbound".
Básicamente, quiere todo dentro de la sección system.serviceModel :
fuente
Este me volvió loco.
Estoy usando Silverlight 3 Prism (CAB) con WCF
Cuando llamo a un servicio WCF en un módulo Prism, obtengo el mismo error:
Resulta que está buscando en el archivo .xap del Shell un archivo ServiceReferences.ClientConfig, no en el archivo ServiceReferences.ClientConfig del módulo. Agregué mi punto final y enlace al archivo existente ServiceReferences.ClientConfig en mi aplicación Silverlight Shell (llama a sus propios servicios WCF).
Luego tuve que reconstruir la aplicación Shell para generar el nuevo archivo .xap para la carpeta ClientBin de mi proyecto web.
Ahora esta línea de código finalmente funciona:
fuente
Estaba recibiendo este error dentro de una aplicación ASP.NET donde el servicio WCF se había agregado a una biblioteca de clases que se agrega a la aplicación ASP.NET como un archivo .dll referenciado en la carpeta bin. Para resolver el error, la configuración de configuración en el archivo app.config dentro de la biblioteca de clases que hace referencia al servicio WCF necesitaba copiarse en la configuración web.config para el sitio / aplicación ASP.NET.
fuente
Encontré (además de copiar en la configuración de la aplicación de la interfaz de usuario del cliente, ya que estaba usando una interfaz de la Biblioteca de clases) que tenía que prefijar el nombre del enlace con el nombre de la Referencia de servicio (el mío está
ServiceReference
en el siguiente).p.ej:
en lugar del predeterminado generado:
fuente
Tuve el mismo problema, pero cambiar el espacio de nombres del contrato no funcionó para mí. Así que probé una referencia web de estilo .Net 2 en lugar de una referencia de servicio .Net 3.5. Eso funciono.
Para usar una referencia web en Visual Studio 2008, haga clic en 'Agregar referencia de servicio', luego haga clic en 'Avanzado' cuando aparezca el cuadro de diálogo. En eso encontrará una opción que le permitirá utilizar una referencia web en lugar de una referencia de servicio.
fuente
La unidad que prueba una aplicación que no es de biblioteca y que consume un servicio puede causar este problema.
La información que otros han ingresado aborda la causa raíz de esto. Si está intentando escribir casos de prueba automatizados y la unidad que está probando realmente invocará la interfaz de servicio, debe agregar la referencia de servicio al proyecto de prueba. Esta es una muestra de la aplicación que utiliza el tipo de error de biblioteca. Sin embargo, no me di cuenta de inmediato porque mi código que consume la interfaz no está en una biblioteca . Sin embargo, cuando la prueba realmente se ejecute, se ejecutará desde el ensamblaje de prueba, no desde el ensamblaje bajo prueba.
Agregar una referencia de servicio al proyecto de prueba unitaria resolvió mi problema.
fuente
Tengo una situación que en la prueba de la Unidad. Copié el archivo app.config en el proyecto de prueba de la unidad. Por lo tanto, el proyecto de prueba unitaria también contiene información de punto final.
fuente
system.serviceModel
sección. ¡Eso es todo!system.serviceModel
archivo en la aplicación. Configuración de una aplicación de consolaMe enfrenté a este problema una vez. Fue porque todavía estaba desarrollando la interfaz que usa el servicio WCF. Configuré la aplicación de prueba y continué el desarrollo. Luego, en desarrollo, cambié algunos de los espacios de nombres de los servicios. Así que verifiqué dos veces "system.serviceModel -> client -> endpoint -> contract" en web.config para que coincida con la clase WCF. Entonces el problema está resuelto.
fuente
El espacio de nombres en su configuración debe reflejar el resto de la ruta del espacio de nombres después del espacio de nombres predeterminado de su cliente (como está configurado en las propiedades del proyecto). Según su respuesta publicada, supongo que su cliente está configurado para estar en el espacio de nombres "Fusion.DataExchange.Workflows". Si movió el código del cliente a otro espacio de nombres, necesitaría actualizar la configuración para que coincida con la ruta restante del espacio de nombres.
fuente
Tengo el mismo problema. Utilicé el servicio WCF en la biblioteca de clases y llamo a la biblioteca de clases desde el proyecto de aplicación de Windows.
<system.serviceModel>
Pero olvido el cambio en el archivo de configuración de la aplicación de Windows<system.serviceModel>
.solución: cambiar la configuración del proyecto externo igual que la configuración wcf de la biblioteca de clases.
fuente
Hola, he encontrado el mismo problema, pero la mejor solución es dejar que .NET configure la configuración del lado del cliente. Lo que descubro es esto cuando agrego una referencia de servicio con una cadena de consulta de http: /namespace/service.svc? Wsdl = wsdl0 que NO crea puntos finales de configuración en el lado del cliente. Pero cuando elimino el? Wsdl-wsdl0 y solo uso la url http: /namespace/service.svc, crea la configuración del punto final en el archivo de configuración del cliente. para abreviar, elimine el "? WSDL = WSDL0".
fuente
No coloque la línea de declaración del cliente de servicio como campo de clase, en lugar de esto, cree una instancia en cada método que se haya utilizado. Así se solucionará el problema. Si crea una instancia de cliente de servicio como campo de clase, se produce un error de tiempo de diseño.
fuente
En caso de que esté utilizando la aplicación WPF utilizando el marco PRISM, entonces la configuración debe existir en su proyecto de inicio (es decir, en el proyecto donde reside su programa de arranque).
fuente
Este error puede surgir si está llamando al servicio en una biblioteca de clases y llamando a la biblioteca de clases desde otro proyecto.
fuente
Parece que hay varias formas de crear / solucionar este problema. Para mí, el producto CRM que estoy usando fue escrito en código nativo y puede llamar a mi .NET dll, pero me encuentro con la información de configuración que necesita estar en / por encima de la aplicación principal. Para mí, la aplicación CRM no es .NET, así que terminé teniendo que ponerla en mi archivo machine.config (no donde la quiero). Además, dado que mi compañía usa Websense, tuve dificultades incluso para agregar la Referencia de servicio debido a un problema de 407 Proxy Authentication Required, que requería una modificación en machine.cong.
Solución proxy:
Para que funcione la referencia de servicio WCF, tuve que copiar la información de la aplicación.config de mi DLL a la configuración principal de la aplicación (pero para mí eso fue machine.config). Y también tuve que copiar la información del punto final a ese mismo archivo. Una vez que lo hice, comenzó a funcionar para mí.
fuente
Okay. Mi caso era un poco diferente, pero finalmente encontré la solución: tengo una Console.EXE -> DLL -> Invocando WS1 -> DLL -> Invocando WS2
He tenido las configuraciones del modelo de servicio de WS1 y WS2 en Console.EXE.config según lo recomendado. - No resolvió el problema.
Pero todavía no funcionó, hasta que también agregué la WebReference de WS2 a WS1 y no solo a la DLL que realmente crea e invoca el proxy de WS2.
fuente
Si hace referencia al servicio web en su biblioteca de clases, debe copiar app.config a su aplicación de Windows o aplicación de consola
solución: cambiar la configuración del proyecto externo igual que la configuración wcf de la biblioteca de clases
Trabajó para mi
fuente
Tuve el mismo problema
que estaba usando la aplicación de escritorio y el servicio web Global Weather
Eliminé la referencia de servicio y agregué la referencia web y el problema resuelto Gracias
fuente
La solución para mí fue eliminar el nombre del punto final del atributo Nombre del punto final en el cliente web.config esto permitió que el proxy usara
solo tomó todo el día para hacer ejercicio. Además, el nombre del contrato era incorrecto una vez que esta solución estaba en su lugar, aunque había sido incorrecto cuando apareció el error inicial. ¡Verificación doble y triple de las cadenas de nombre del contrato! Atrib: Ian
fuente
Permítame agregar una cosa más para buscar. ( Tom Haigh's respuesta de ya lo alude, pero quiero ser explícito)
Mi
web.config
archivo tenía lo siguiente definido:Ya estaba usando basicHttpsBinding para una referencia, pero luego agregué una nueva referencia que requería basicHttpBinding (sin s). Todo lo que tenía que hacer era agregar eso a mi de la
protocolMapping
siguiente manera:Como LR señala correctamente, esto debe definirse en los lugares correctos. Para mí, eso significaba uno en la aplicación app.config de mi proyecto de prueba de unidad, así como uno en web.config del proyecto de servicio principal.
fuente
Tuve este error cuando hacía referencia al Contrato en el elemento del archivo de configuración sin el operador de alcance global.
es decir
funciona, pero
muestra el error "No se pudo encontrar el elemento de punto final predeterminado que hace referencia al contrato".
El ensamblado que contiene MyNamepsace.IMyContract está en un ensamblado diferente a la aplicación principal, por lo que esto puede explicar la necesidad de utilizar la resolución de alcance global.
fuente
Cuando agrega una referencia de servicio
tenga cuidado con el espacio de nombres que está escribiendo:
Debe agregarlo al nombre de su interfaz:
fuente
Obtuve el mismo error y he intentado muchas cosas pero no funcionó, entonces noté que mi "contrato" no era el mismo en todos los proyectos, cambié el contrato ya que sería el mismo para todos los proyectos dentro de la solución y funcionó. Este es el proyecto A
Proyecto B:
Finalmente cambié para ambos como:
fuente
Tuve el mismo problema y se resolvió solo cuando la aplicación host y el dll que usaban ese punto final tenían el mismo nombre de referencia de servicio.
fuente