2012-06-07 5 views
5

Hej chłopaki,Client '*' nie został odnaleziony w 1 Endpoints, WCF, Mono

próbuję dostęp usługa hostowane na maszynie wirtualnej (Windows 7) z mojego hosta Ubuntu wykorzystaniem Mono.

Mogę zaimportować plik wdsl i wygenerować referencję usługi. Skopiowałem App.config z innego działającego klienta, który poprawnie łączy się z serwisem internetowym.

Kiedy próbuję połączyć się z usługą internetową za pomocą za pomocą System;

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

pojawia się błąd:

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 

plik My App.config wygląda następująco:

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

ktoś popełnił tę pracę używając Linuksa?

Odpowiedz

7

Narzędzie importu WSDL Mono nie obsługuje automatycznego generowania konfiguracji, musisz ręcznie skonfigurować punkty końcowe w swoim app.config.

Błąd, który widzisz tutaj oznacza, że ​​WCF nie może znaleźć sekcji konfiguracji punktu końcowego.

szczegółowy, z powodów technicznych problemu

Otrzymujesz tego powodu Visual Studio i Mono mają inny sposób niezgodne przedstawieniu sekcji konfiguracji.

Podczas dodawania odwołania do usługi w Visual Studio automatycznie tworzy i aktualizuje odpowiednie wpisy w swoim app.config. "Nazwa kontraktu", która jest w wygenerowanym <endpoint ... contract="contract name">, niekoniecznie jest w pełni kwalifikowaną nazwą klasy kontraktu danych w wygenerowanym Reference.cs.

Zamiast Visual Studio emituje

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

ConfigurationName jest taka sama jak w elemencie <endpoint ... contract="...">, to jak WCF wyszukuje konfigurację końcowego.

W Mono, ponieważ nie obsługują generowanie pliku konfiguracyjnego jeszcze, że emitują

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

Bez ConfigurationName argumentu, domyślnie jest to w pełni kwalifikowana nazwa tego interfejsu.

Jak rozwiązać problem

Aby to dostać się do pracy, trzeba edytować plik app.config i korzystania w pełni kwalifikowaną nazwę interfejsu umowa o świadczenie usług w elemencie <endpoint ... contract="...">.

W twoim przypadku zmiana contract="ServiceReference1.IService1" na contract="TestServer.IService1" powinna to zrobić.

Inaczej spojrzeć w wygenerowanym Reference.cs, szukaj interfejs z [ServiceContractAttribute] i którym C# nazw to jest w

0

Mono WCF jest częściowa implementacja z dotnet WCF, stąd niewiele funkcji i wiązania są obsługiwane.

jest też artykuł, który mówi

Składniki, których nie planuje się wesprzeć

WSHttpBinding and its dependencies TransactionFlow ReliableSession

Zobacz: http://www.mono-project.com/WCF_Development

+0

Dzięki, problem jest tak stary, że nie szukam już rozwiązania. Ale dzięki twojej pomocy! – Sebastian

Powiązane problemy