2012-06-07 5 views
5

Les gars Hej,configuration du point de terminaison client '*' n'a pas été trouvé dans 1 Endpoints, WCF, Mono

je suis en train d'accéder à un webservice hébergé sur une machine virtuelle (Windows 7) de mon hôte Ubuntu en utilisant Mono.

Je peux importer le fichier wdsl et générer la référence du service. J'ai copié le App.config à partir d'un autre client travaillant correctement sur le webservice.

Lorsque j'essaie de me connecter au WebService en utilisant en utilisant 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(); 
    } 
} 
} 

Je reçois une erreur:

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 

Mon fichier App.config se présente comme suit:

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

Quelqu'un at-il fait ce travail en utilisant Linux?

Répondre

7

L'outil d'importation WSDL de Mono ne prend pas encore en charge la génération automatique de configuration, vous devez configurer manuellement vos points de terminaison dans votre app.config. L'erreur que vous voyez ici signifie que WCF ne peut pas trouver la section de configuration de point de terminaison.

La raison technique détaillée du problème

Vous obtenez cela parce que Visual Studio et Mono ont une manière différente, incompatible de référence à la section de configuration. Lorsque vous ajoutez une référence de service dans Visual Studio, elle crée et met automatiquement à jour les entrées correspondantes dans votre app.config. Le "nom du contrat" ​​figurant dans le <endpoint ... contract="contract name"> généré n'est pas nécessairement le nom complet de la classe de contrat de données dans le Reference.cs généré.

Au lieu de cela, Visual Studio émet

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

Le ConfigurationName est le même que dans l'élément <endpoint ... contract="...">, voilà comment WCF trouve la configuration des terminaux.

En Mono, étant donné que nous ne soutenons pas la génération de fichiers config encore, nous émettons

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

Sans l'argument ConfigurationName, la valeur par défaut est le nom complet de cette interface.

Comment résoudre votre problème

Pour que cela fonctionne, vous devez modifier votre fichier app.config et utiliser le nom complet de l'interface de votre contrat de service dans l'élément <endpoint ... contract="...">.

Dans votre cas, changer contract="ServiceReference1.IService1" en contract="TestServer.IService1" devrait le faire.

Sinon, regardez dans le produit Reference.cs, recherchez une interface avec un [ServiceContractAttribute] et qui namespace C# est en

0

Mono WCF est Implémentation partielle de dotnet WCF, d'où quelques fonctionnalités et de liaison sont non pris en charge.

Il y a aussi un article qui dit

Composants sans plan pour soutenir

WSHttpBinding and its dependencies TransactionFlow ReliableSession

S'il vous plaît voir: http://www.mono-project.com/WCF_Development

+0

Merci, le problème est en fait ce vieux que je ne cherche plus une solution. Mais grâce à votre aide! – Sebastian

Questions connexes