2012-06-07 3 views
5

Hej Jungs, gefundenClient-Endpunkt-Konfiguration '*' wurde nicht in 1 Endpoints, WCF, Mono

Ich versuche, einen Webservice auf einer virtuellen Maschine (Windows 7) von meinem Ubuntu-Host unter Verwendung von Mono gehostet zuzugreifen.

kann ich die WDSL-Datei importieren und den Dienstverweis erzeugen. Ich habe die App.config von einem anderen funktionierenden Client kopiert, der korrekt auf den Webservice zugreift.

Wenn ich versuche, an den Webservice zu verbinden using System verwendet wird;

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

Ich erhalte eine Fehlermeldung:

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 

Meine App.config-Datei wie folgt aussieht:

<?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> 

Hat jemand diese Arbeit mit Linux gemacht?

Antwort

7

Monos WSDL-Import-Tool unterstützt die automatische Konfiguration noch nicht, Sie müssen Ihre Endpunkte manuell in Ihrem app.config konfigurieren.

Der Fehler, die Sie hier sehen, bedeutet, dass WCF nicht den Endpunkt Konfigurationsabschnitt finden.

Die detaillierte, technische Grund für das Problem

Sie erhalten das, weil Visual Studio und Mono von Verweisen auf die Konfigurationsabschnitt eine andere, inkompatible Weise haben.

Wenn eine Service-Referenz in Visual Studio hinzufügen, erstellt es automatisch und aktualisiert die entsprechenden Einträge in Ihrem app.config. Der „Vertrag Name“, die in den generierten <endpoint ... contract="contract name"> ist nicht unbedingt der vollständige Name des Datenvertragsklasse in den generierten Reference.cs.

Stattdessen Visual Studio emittiert

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

Die ConfigurationName die gleiche wie in dem <endpoint ... contract="..."> Element ist, das ist, wie WCF die Endpunktkonfiguration findet.

In Mono, da wir keine Konfigurationsdatei Generation unterstützen noch emittieren wir

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

Ohne das ConfigurationName Argument, das Standard der vollständige Name dieser Schnittstelle ist.

Wie Ihr Problem

beheben diese Arbeit zu bekommen, müssen Sie Ihre app.config Datei und verwenden Sie die vollständig qualifizierten Namen Ihrer Servicevertrags-Schnittstelle im <endpoint ... contract="..."> Elemente bearbeiten.

In Ihrem Fall sollte die Änderung contract="ServiceReference1.IService1" in contract="TestServer.IService1" es tun.

Ansonsten schauen in die generierte Reference.cs mit einem [ServiceContractAttribute] für eine Schnittstelle suchen und die C# Namespace in ist

0

Mono WCF ist Teilimplementierung von Dotnet WCF, also wenige Feature und Bindung werden nicht unterstützt.

Es gibt auch einen Artikel, der

Komponenten ohne Plan sagt

WSHttpBinding and its dependencies TransactionFlow ReliableSession

01 zu unterstützen,Bitte sehen Sie:
+0

Danke, das Problem ist eigentlich so alt, dass ich nicht mehr nach einer Lösung suche. Aber dank deiner Hilfe! – Sebastian

Verwandte Themen