web-dev-qa-db-fra.com

Erreur WCF - Impossible de trouver l'élément de noeud final par défaut faisant référence au contrat 'UserService.UserService'

Une idée de comment réparer ça?

UserService.UserServiceClient userServiceClient = new UserServiceClient();
            userServiceClient.GetUsersCompleted += new EventHandler<GetUsersCompletedEventArgs>(userServiceClient_GetUsersCompleted);
            userServiceClient.GetUsersAsync(searchString);

.

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_UserService" 
                     maxBufferSize="2147483647" 
                     maxReceivedMessageSize="2147483647">
                <security mode="None" />
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://localhost:52185/UserService.svc" 
                  binding="basicHttpBinding" 
                  bindingConfiguration="BasicHttpBinding_UserService" 
                  contract="UserService.UserService"
                  name="BasicHttpBinding_UserService" />
    </client>
    <behaviors>
        <serviceBehaviors>
            <behavior name="Shell.Silverlight.Web.Service3Behavior">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <services>
        <service behaviorConfiguration="Shell.Silverlight.Web.Service3Behavior" 
                 name="Shell.Silverlight.Web.Service3">
            <endpoint address="" 
                      binding="basicHttpBinding" 
                      contract="Shell.Silverlight.Web.Service3" />
            <endpoint address="mex" 
                      binding="mexHttpBinding" 
                      contract="IMetadataExchange" />
        </service>
    </services>
</system.serviceModel>

Impossible de trouver l'élément de noeud final par défaut faisant référence au contrat 'UserService.UserService' dans la section de configuration du client ServiceModel. Cela peut être dû au fait qu'aucun fichier de configuration n'a été trouvé pour votre application ou qu'aucun élément de noeud final correspondant à ce contrat n'a été trouvé dans l'élément client.

Résolu!

Je n'ai pas mentionné qu'il s'agissait d'une application Silverlight. J'avais la référence wcf dans une DLL qui avait son propre fichier "ServiceReferences.ClientConfig". J'ai déplacé le contenu de ServiceReferences.ClientConfig de la DLL dans le projet principal silverlight et cela a fonctionné.

96
NotDan

J'ai eu un problème avec le même problème. Mon application était également une application Silverlight et le service était appelé à partir d'une bibliothèque de classes contenant un contrôle UserControl personnalisé.

La solution est simple Copiez les définitions de noeud final à partir du fichier de configuration (par exemple, ServiceReferences.ClientConfig) de la bibliothèque de classes dans le fichier de configuration de l'application silverlight. Je sais que vous vous attendriez à ce que cela fonctionne sans avoir à le faire, mais apparemment, quelqu'un à Redmond avait pris des vacances ce jour-là.

185
sprite

Vous pouvez également définir ces valeurs par programme dans la bibliothèque de classes, afin d'éviter tout déplacement inutile des fichiers de configuration dans la bibliothèque . L'exemple de code pour BasciHttpBinding simple est - 

BasicHttpBinding basicHttpbinding = new BasicHttpBinding(BasicHttpSecurityMode.None);
basicHttpbinding.Name = "BasicHttpBinding_YourName";
basicHttpbinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
basicHttpbinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;

EndpointAddress endpointAddress = new EndpointAddress("http://<Your machine>/Service1/Service1.svc");
Service1Client proxyClient = new Service1Client(basicHttpbinding,endpointAddress);
43
Vishal

Juste au cas où quelqu'un rencontrerait le même problème en utilisant WPF (plutôt que WCF ou Silverlight):

J'ai eu cette erreur lors de la connexion à un service Web. Lorsque mon code était dans la solution "principale" de l'application WPF, pas de problème, cela fonctionnait parfaitement. Mais lorsque j'ai déplacé le code vers la solution plus sensible de couche DAL, cela jetterait l'exception.

Impossible de trouver l'élément de noeud final par défaut faisant référence au contrat 'MyWebService.MyServiceSoap' dans la section de configuration du client ServiceModel. Cela peut être dû au fait qu'aucun fichier de configuration n'a été trouvé pour votre application ou qu'aucun élément de noeud final correspondant à ce contrat n'a été trouvé dans l'élément client.

Comme indiqué par "Sprite" dans ce fil de discussion, vous devez copier manuellement la balise. 

Pour les applications WPF, cela signifie que vous devez copier la balise de app.config dans ma solution DAL vers app.config dans la solution principale WPF Application.

12
Mike Gledhill

J'ai rencontré le même problème, pour une raison quelconque Visual Studio n'a pas mis à jour la configuration Web lorsque j'ai ajouté le service. J'ai constaté que la mise à jour de la référence de service corrigeait également ce problème.

Pas:

  1. Accédez au dossier de référence du service
  2. Élargir
  3. Clic droit et sélectionnez le service de mise à jour de mise à jour
  4. Observez que la configuration Web est mise à jour
6
Dale C

Modifiez le service Web.config du service WCF comme suit: "adresse du noeud final =" "binding =" basicHttpBinding "..." (anciennement binding = "wsHttpBinding") . Ensuite, cela fonctionnera bien.

4
Sarav

Renommez le fichier output.config produit par svcutil.exe en app.config .

3
ssilas

Avez-vous une interface que votre classe "UserService" implémente.

Vos points de terminaison doivent spécifier une interface pour l'attribut de contrat:

contract="UserService.IUserService"
2
Nick Josevski

Pas sûr qu'il s'agisse d'un problème ..__

1
david valentine

Pas sûr que ce soit vraiment un problème, mais je vois que vous avez le même nom pour votre configuration de liaison ().

J'essaie généralement d'appeler mes points de terminaison comme "UserServiceBasicHttp" ou quelque chose de similaire (la "Liaison" n'a vraiment rien à faire ici) et j'essaie d'appeler mes configurations de liaison avec ".... Configuration", par exemple. "UserServiceDefaultBinding", pour éviter tout conflit de nom potentiel.

Marc

1
marc_s

Il a fallu ajouter le service dans le fichier App.config appelant pour que cela fonctionne. Assurez-vous que vous, mais après tout. Cela a semblé fonctionner pour moi.

0
Jackstine

Pour ceux qui travaillent avec AX 2012 AIF services et essaient d'y appeler C # ou VB projet dans AX (x ++) et qui souffrent de telles erreurs de "impossible de trouver le point de terminaison par défaut" ... ou "no contract found" ... Revenez à votre projet Visual Studio (c #) et ajoutez ces lignes avant de définir votre client de service, puis déployez le projet et redémarrez le client AX et retry: Remarque: l’exemple concerne Adaptateur NetTcp , vous pouvez facilement utiliser un autre adaptateur à la place, en fonction de vos besoins.

 Uri Address = new Uri("net.tcp://your-server:Port>/DynamicsAx/Services/your-port-name");
 NetTcpBinding Binding = new NetTcpBinding();
 EndpointAddress EndPointAddr = new EndpointAddress(Address);
 SalesOrderServiceClient Client = new SalesOrderServiceClient(Binding, EndPointAddr);
0
Boody

Ce problème se produit lorsque vous utilisez votre service via une autre application.Si l'application a un fichier de configuration, ajoutez simplement les informations de configuration de votre service à ce fichier . Dans mon cas, il n'y avait aucun fichier de configuration, aussi j'utilise cette technique et tout a bien fonctionné. Il suffit de stocker l’adresse url dans l’application, de la lire et, à l’aide de la méthode BasicHttpBinding (), de l’envoyer à l’application de service en tant que paramètre. C’est une démonstration simple de la façon dont je l’ai fait:

Configuration config = new Configuration(dataRowSet[0]["ServiceUrl"].ToString());

var remoteAddress = new System.ServiceModel.EndpointAddress(config.Url);


SimpleService.PayPointSoapClient client = 
    new SimpleService.PayPointSoapClient(new System.ServiceModel.BasicHttpBinding(), 
    remoteAddress);
SimpleService.AccountcredResponse response = client.AccountCred(request);
0
Suleymani Tural