2012-06-07 15 views
5

chicos Hej,Cliente '*' no se encontró en 1 puntos finales, WCF, Mono

que estoy tratando de acceder a un servicio web alojado en una máquina virtual (Windows 7) de mi anfitrión Ubuntu utilizando Mono.

Puedo importar el archivo wdsl y generar la referencia del servicio. Copié el App.config de otro cliente que estaba trabajando accediendo correctamente al servicio web.

Cuando intento conectarme al servicio web usando usando Sistema;

namespace MonoTest 
{ 
class MainClass 
{ 
    public static void Main (string[] args) 
    { 
     Console.WriteLine ("Hello World!"); 
     TestServer.Service1Client client = new TestServer.Service1Client("Test"); 
     Console.WriteLine(client.GetData(12)); 
     Console.ReadLine(); 
    } 
} 
} 

Me aparece un error:

System.InvalidOperationException: Client endpoint configuration 'Test' was not found in 1 endpoints. 
    at System.ServiceModel.ChannelFactory.ApplyConfiguration (System.String endpointConfig) [0x00000] in <filename unknown>:0 
    at System.ServiceModel.ChannelFactory.InitializeEndpoint (System.String endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) [0x00000] in <filename unknown>:0 
    at System.ServiceModel.ChannelFactory`1[MonoTest.TestServer.IService1]..ctor (System.String endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) [0x00000] in <filename unknown>:0 
    at System.ServiceModel.ClientBase`1[MonoTest.TestServer.IService1].Initialize (System.ServiceModel.InstanceContext instance, System.String endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) [0x00000] in <filename unknown>:0 
    at System.ServiceModel.ClientBase`1[MonoTest.TestServer.IService1]..ctor (System.ServiceModel.InstanceContext instance, System.String endpointConfigurationName) [0x00000] in <filename unknown>:0 
    at System.ServiceModel.ClientBase`1[MonoTest.TestServer.IService1]..ctor (System.String endpointConfigurationName) [0x00000] in <filename unknown>:0 
    at MonoTest.TestServer.Service1Client..ctor (System.String endpointConfigurationName) [0x00000] in <filename unknown>:0 
    at MonoTest.MainClass.Main (System.String[] args) [0x0000a] in /home/***/WebserviceTest/MonoTest/MonoTest/Main.cs:11 

archivo Mi App.config tiene el siguiente aspecto:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
     <bindings> 
      <wsHttpBinding> 
       <binding name="WSHttpBinding_IService1" /> 
      </wsHttpBinding> 
     </bindings> 
     <client> 
      <endpoint name="Test" 
       address="http://192.168.178.34:8732/Design_Time_Addresses/TestServer/Service1/" 
       binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IService1" 
       contract="ServiceReference1.IService1" > 
       <identity> 
        <dns value="localhost" /> 
       </identity> 
      </endpoint> 
     </client> 
    </system.serviceModel> 
</configuration> 

nadie ha hecho este trabajo utilizando Linux?

Respuesta

7

La herramienta de importación WSDL de Mono aún no admite la generación automática de configuraciones, necesita configurar manualmente sus puntos finales en su app.config.

El error que está viendo aquí significa que WCF no puede encontrar la sección de configuración del punto final.

La razón técnica detallada para el problema

Usted está recibiendo esta porque Visual Studio y Mono tienen una forma diferente, incompatibles en incluir la sección de configuración.

Al agregar una Referencia de servicio en Visual Studio, crea y actualiza automáticamente las entradas correspondientes en su app.config. El "nombre del contrato" que está en el <endpoint ... contract="contract name"> generado no es necesariamente el nombre completo de la clase de contrato de datos en el Reference.cs generado.

lugar, Visual Studio emite

[ServiceContractAttribute(ConfigurationName="contract name")] 
    public interface YourContract { 
      .... 
    } 

El ConfigurationName es el mismo que en el elemento <endpoint ... contract="...">, así es como WCF encuentra la configuración de punto final.

en mono, ya que no son compatibles con la generación de archivos de configuración, sin embargo, que emiten

[ServiceContractAttribute] 
    public interface YourContract { 
      .... 
    } 

Sin el argumento ConfigurationName, el valor predeterminado es el nombre completo de esa interfaz.

cómo resolver su problema

Para conseguir que esto funcione, es necesario modificar el archivo app.config y utilizar el nombre completo de la interfaz de contrato de servicio en el elemento <endpoint ... contract="...">.

En su caso, cambiar contract="ServiceReference1.IService1" en contract="TestServer.IService1" debería hacerlo.

De lo contrario, mira en la Reference.cs generado, buscar una interfaz con una [ServiceContractAttribute] y que C# espacio de nombres es en

0

Mono WCF es Implementación parcial de WCF dotnet, por lo tanto pocos característica y la unión no son compatibles:.

también hay un artículo que dice

componentes con ningún plan para apoyar

WSHttpBinding and its dependencies TransactionFlow ReliableSession

Por favor vea: http://www.mono-project.com/WCF_Development

+0

Gracias, el problema es tan viejo que ya no estoy buscando una solución. ¡Pero gracias a tu ayuda! – Sebastian

Cuestiones relacionadas