2010-07-06 20 views
12

Lo siento por el enunciado del problema a largo ... He pasado dos días depuración y tienen un montón de notas ..."No se pudo encontrar elemento de punto final con el nombre ..."

que tienen un servicio de datos WCF y otro proceso que intenta conectarse a él como cliente a través de TCP y/o HTTP.

Tengo una aplicación de cliente de prueba muy simple que parece conectarse bien, pero la aplicación de producción más complicada no se puede conectar (ni TCP o HTTP). En ambos proyectos de cliente, dejé que Visual Studio 2008 generara app.config usando "Agregar referencia de servicio" y dejando que extraiga los metadatos del servicio de datos.

Aquí está el código para el cliente de prueba simple que funciona:

using Client.MyDataService; 

namespace Client 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      MyDataServiceClient client = new MyDataServiceClient("net.tcp"); 

      client.GetRecords(); 
     } 
    } 
} 

Aquí está el código para el más complicado, el cliente de la producción:

DataServiceManager.cs:

using MyServer.MyDataService; 

namespace MyServer.DataServiceBridge 
{ 
    class DataServiceManager 
    { 
     MyDataServiceClient dataServiceClient = new MyDataServiceClient("net.tcp"); 
} 
} 

En proceso principal:

DataServiceManager d = new DataServiceManager(); 

Aquí está el archivo app.config para ambos cliente sencillo cliente y producción:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
     <bindings> 
      <netTcpBinding> 
       <binding name="net.tcp" closeTimeout="00:01:00" openTimeout="00:01:00" 
        receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false" 
        transferMode="Buffered" transactionProtocol="OleTransactions" 
        hostNameComparisonMode="StrongWildcard" listenBacklog="10" 
        maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10" 
        maxReceivedMessageSize="65536"> 
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
         maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
        <reliableSession ordered="true" inactivityTimeout="00:10:00" 
         enabled="false" /> 
        <security mode="Transport"> 
         <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" /> 
         <message clientCredentialType="Windows" /> 
        </security> 
       </binding> 
      </netTcpBinding> 
     </bindings> 
     <client> 
      <endpoint address="net.tcp://localhost:8888/MyDataService" 
       binding="netTcpBinding" bindingConfiguration="net.tcp" contract="MyDataService.IMyDataService" 
       name="net.tcp"> 
       <identity> 
        <userPrincipalName value="COMPUTER_NAME\Username" /> 
       </identity> 
      </endpoint> 
     </client> 
    </system.serviceModel> 
</configuration> 
  • En depuración \ bin \ de MiServidor es MyServer.exe, app.config.

  • En MyDataSeriviceHost de bin \ Debug \ carpeta es MyDataService.exe, app.config y MyDataSeriviceHost.exe.config. app.config y MyDataSeriviceHost.exe.config son idénticos.

Aquí está el mensaje de error:

An exception of type 'System.InvalidOperationException' occurred in System.ServiceModel.dll but 
was not handled in user code 

Additional information: Could not find endpoint element with name 'net.tcp' and contract 
'MyDataService.IMyDataService' in the ServiceModel client configuration section. 
This might be because no configuration file was found for your application, or because no endpoint 
element matching this name could be found in the client element. 

Alguna idea de lo que está pasando? Agoté bastante a Google. :-(

+1

Probablemente un error tipográfico, pero su error mensaje lee: IyDataService. Probablemente debería ser IMyDataService. –

+0

Sí, eso fue un error al redactar para publicar aquí. Reparado, gracias! – CrypticPrime

+0

por favor no duplique etiquetas como "WCF" en el título. Para eso son las etiquetas. –

Respuesta

18

SOLUCIONADO

resulta que tenemos un exe que carga un archivo DLL. la DLL contiene el WCF cliente. Cuando se compila, se genera MyServer.dll.config, pero como el exe es nativo (no .NET) no se lee automáticamente en un archivo .config. Tenemos que hacerlo manualmente. T su enlace me permitió cargar la configuración de forma manual y crear una CustomChannelFactory <> para resolver esta pregunta.

Para cualquier otra persona que necesita la misma cosa, aquí está el enlace que condujo a la solución: http://www.paraesthesia.com/archive/2008/11/26/reading-wcf-configuration-from-a-custom-location.aspx

3

Podría ser solo la forma en que lo escribió, pero parece que su archivo de configuración no se está copiando correctamente en el directorio. Debe tener un nombre que coincida con su aplicación, no app.config. Si intenta cambiar el nombre del archivo app.config a exe.config [su nombre exe] hace eso ayuda.

+0

Lo intenté también. No funciona. Tanto app.config como MyServer.exe.config están ahí (y traté de eliminar una u otra también solo por patadas). – CrypticPrime

+0

Bueno, solo para futuras aplicaciones de referencia. Conconfig nunca funcionará porque no será recogido.Entonces, ambas aplicaciones tienen el archivo .config allí con el nombre que coincide con el nombre del actual exe. ¿Quizás copió la configuración de la aplicación simple en la aplicación compleja y se olvidó de cambiar el nombre de la configuración? – spinon

+0

Tristemente, me gustaría que este fuera el caso. Todos los nombres de archivo son correctos. – CrypticPrime

5

que tenía una situación como ésta, donde tuve

  • WCF servicio alojado en algún lugar
  • Proyecto principal
  • Consumer Project del tipo 'class Library' que tiene referencia de servicio para un servicio WCF
  • Main proj ect llama a los métodos de proyecto de consumidores

Ahora el proyecto del Consumidor había todo el ajuste de configuración relacionados en <system.serviceModel> etiqueta de mi app.config, su todavía estaba lanzando el mismo error que el anterior.

Todo lo que hice fue agregado la misma etiqueta <system.serviceModel> al archivo app.config de mi proyecto principal, y finalmente fuimos buenos.

El problema real, por lo que en mi caso era, que estaba leyendo el archivo de configuración incorrecta. En lugar de la aplicación app.config del consumidor, estaba refiriendo la configuración del proj principal. me llevó dos horas darme cuenta de eso.

1

Cuando el EXE consume la DLL, el archivo de configuración que busca no es DLLName.Dll.Config su EXEName.exe.config, cambia el nombre del archivo de configuración generado y lo copia a la ruta de ejecución. Deberia de funcionar.

Saludos !!!!!!!!!

0

Una situación similar con una solución diferente que pueda ser de uso en estas circunstancias particulares:

  • Al igual que los puestos de arriba, tengo una EXE alojamiento Client define en DLL.

  • diferente a la situación anterior es que mi cliente está utilizando la sonda UDP para descubrir los extremos de servicio (obviamente servicio ha permitido a MEX)

El ClientProxy hereda DuplexClientBase, y el método de instancias sobrecargada le permite especificar unión y punto final sin requerir CUALQUIER archivo de configuración.

Un VB ejemplo, he descubierto un punto final (EP) y sé que la unión es TCP con la seguridad deshabilitada, por lo que puede crear una instancia y utilizar el cliente de devolución de llamada como:

myClientProxy = New ClientProxy(New InstanceContext(Me), New NetTcpBinding(SecurityMode.None), ep.Address) 
Cuestiones relacionadas