IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Windows Discussion :

Endpoint WCF dans un UserControl WPF


Sujet :

Développement Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Par défaut Endpoint WCF dans un UserControl WPF
    Bonsoir à tous,
    J'ai actuellement un problème concernant un UserControl que j'essaie de tester dans une application WPF. Une erreur de EndPoint introuvable

    Pour commencer, j'héberge un service WCF dans un service Windows.
    J'ai réalisé un client quelconque qui accède à ce WCF, il contient la référence vers ce service et un fichier App.config :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <system.serviceModel>
            <bindings>
                <basicHttpBinding>
                    <binding name="BasicHttpBinding_IMyWcfService" closeTimeout="00:01:00"
                        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                        allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                        maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                        useDefaultWebProxy="true">
                        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                        <security mode="None">
                            <transport clientCredentialType="None" proxyCredentialType="None"
                                realm="" />
                            <message clientCredentialType="UserName" algorithmSuite="Default" />
                        </security>
                    </binding>
                </basicHttpBinding>
            </bindings>
            <client>
                <endpoint address="http://localhost:25000/service/" binding="basicHttpBinding"
                    bindingConfiguration="BasicHttpBinding_IMyWcfService" contract="ReferenceWcfServiceDistant.IMyWcfService"
                    name="BasicHttpBinding_IMyWcfService" />
            </client>
        </system.serviceModel>
    </configuration>

    Le client fonctionne parfaitement, j'arrive à accéder aux différentes méthodes qu'il me propose. Il me suffit d'instancier un nouveau client et ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReferenceWcfServiceDistant.MyWcfServiceClient cli = new ReferenceWcfServiceDistant.MyWcfServiceClient();

    Venons en au fait.
    J'ai réalisé un petit WPF UserControl qui se charge d'accéder à ce Service.
    Je lui ai donc ajouté une référence de service et il m'a construit un fichier app.config qui est le suivant :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <system.serviceModel>
            <bindings>
                <basicHttpBinding>
                    <binding name="BasicHttpBinding_IMyWcfService" closeTimeout="00:01:00"
                        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                        allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                        maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                        useDefaultWebProxy="true">
                        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                        <security mode="None">
                            <transport clientCredentialType="None" proxyCredentialType="None"
                                realm="" />
                            <message clientCredentialType="UserName" algorithmSuite="Default" />
                        </security>
                    </binding>
                </basicHttpBinding>
            </bindings>
            <client>
                <endpoint address="http://localhost:25000/service/" binding="basicHttpBinding"
                    bindingConfiguration="BasicHttpBinding_IMyWcfService" contract="MaReferenceWebService.IMyWcfService"
                    name="BasicHttpBinding_IMyWcfService" />
            </client>
        </system.serviceModel>
    </configuration>

    Il ne me donne aucune erreur à la compilation.

    Je crée donc une application WPF de test qui contient ce UserControl. Pour cela j'intègre tout simplement mon UserControl de la manière suivante :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <Window x:Class="TEST.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:UC="clr-namespace:WPFPL;assembly=WPFPL"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <UC:ControleWPF Margin="12,12,236,182" />
        </Grid>
    </Window>

    Mais là il me met une erreur, mon Controle contient une CROIX et me donne le code d'erreur suivant :
    Impossible de trouver un élément*de point de terminaison par défaut qui fait référence au contrat 'MaReferenceWebService.IMyWcfService' dans la section de configuration du client ServiceModel. Ceci peut être dû au fait que le fichier de configuration de votre application est introuvable ou que l'élément de point de terminaison correspondant à ce contrat est introuvable dans l'élément client.
    à System.ServiceModel.Description.ConfigLoader.LoadChannelBehaviors(ServiceEndpoint serviceEndpoint, String configurationName)
    à System.ServiceModel.ChannelFactory.ApplyConfiguration(String configurationName, Configuration configuration)
    à System.ServiceModel.ChannelFactory.ApplyConfiguration(String configurationName)
    à System.ServiceModel.ChannelFactory.InitializeEndpoint(String configurationName, EndpointAddress address)
    à System.ServiceModel.ChannelFactory`1..ctor(String endpointConfigurationName, EndpointAddress remoteAddress)
    à System.ServiceModel.EndpointTrait`1.CreateSimplexFactory()
    à System.ServiceModel.ClientBase`1.CreateChannelFactoryRef(EndpointTrait`1 endpointTrait)
    à System.ServiceModel.ClientBase`1.InitializeChannelFactoryRef()
    à System.ServiceModel.ClientBase`1..ctor()
    à WPFPL.MaReferenceWebService.MyWcfServiceClient..ctor() dans C:\Users\Patrick\Desktop\Ecole\C#\Projets\Solution3\WPFPL\Service References\MaReferenceWebService\Reference.cs:ligne 257
    à WPFPL.ControleWPF..ctor() dans C:\Users\Patrick\Desktop\Ecole\C#\Projets\Solution3\WPFPL\ControleWPF.xaml.cs:ligne 28

    Le UserControl ne veut bien s'afficher que si je supprime de mon UserControl lui même l'instanciation de la référence client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ServiceWCF = new MaReferenceWebService.MyWcfServiceClient();
    Dans ce cas l'application WPF voudra bien se lancer sans aucune erreur mais je n'aurai pas accès à mon service.. Ce qui perd son intérêt.

    En gros, je récapitule vite fait :
    J'ai une application WPF qui utilise un contrôle utilisateur qui, lui, fait référence à un service. Ce service est hébergé dans un service Windows.
    J'arrive à accéder à mon service lorsque je suis dans un projet dans la même solution par exemple, donc il fonctionne. Le problème viendrait apparemment du userControl lorsqu'il instancie la référence.


    J'ai parcouru des dizaines de forums et cela fait 2jours que je butte là dessus...

    Merci à ceux qui ont eu le courage de lire mon long poste.

    Joyeux Noël à vous

    EDIT: J'ai lu quelque part que copier le contenu d'un app.config d'un autre client pourrait résoudre le problème, j'ai donc créé un app.config dans mon application WPF et y ai copié le contenu du <system.serviceModel> du UserControl... Mais cela ne donne rien, ai-je fais une mauvaise manip ?
    Je ne suis pas sûr que la solution soit correcte, en avez-vous d'autres ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Ton UserControl est dans un assembly séparé ? Si oui, il faut copier la conf de cet assembly dans le app.config du programme qui l'utilise

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Par défaut
    Bonsoir tomlev, qu'appelles-tu un assembly ?
    Je ne comprends pas trop ce que c'est lorsque je consulte certains liens sur internet...
    Cela permet apparemment de grouper les ressources. Serait-ce un fichier DLL ?
    Mes classes sont dans des solutions différentes

    EDIT:
    J'ai beau recopier le fichier app.config du User Control dans le app.config de l'application WPF mais rien y change. Est-ce bien cela qu'il faut faire ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par roxytbl Voir le message
    Bonsoir tomlev, qu'appelles-tu un assembly ?
    Je ne comprends pas trop ce que c'est lorsque je consulte certains liens sur internet...
    Cela permet apparemment de grouper les ressources. Serait-ce un fichier DLL ?
    Mes classes sont dans des solutions différentes
    http://msdn.microsoft.com/fr-fr/library/hk5f40ct.aspx
    Grosso modo, c'est un exécutable ou une DLL .NET
    Chaque projet Visual Studio génère un assembly distinct

    Citation Envoyé par roxytbl Voir le message
    EDIT:
    J'ai beau recopier le fichier app.config du User Control dans le app.config de l'application WPF mais rien y change. Est-ce bien cela qu'il faut faire ?
    En principe oui... Tu as la même erreur qu'avant ?

    Fais voir ton fichier config final (avec ce que tu as copîé depuis la conf du UserControl)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Par défaut
    J'ai plusieurs projets / Solutions donc il existe plusieurs assembly.
    J'ai ajouté une référence vers l'assembly du UserControl (la DLL en tout cas), j'ai dû créer un fichier app.config à la main étant donné qu'il n'y en avait pas. (il n'y en a pas car je ne fais aucune référence directe vers mon service web, ducoup il n'en génère pas)
    Voici son contenu :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <bindings>
          <basicHttpBinding>
            <binding name="BasicHttpBinding_IMyWcfService" closeTimeout="00:01:00"
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                useDefaultWebProxy="true">
              <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                  maxBytesPerRead="4096" maxNameTableCharCount="16384" />
              <security mode="None">
                <transport clientCredentialType="None" proxyCredentialType="None"
                    realm="" />
                <message clientCredentialType="UserName" algorithmSuite="Default" />
              </security>
            </binding>
          </basicHttpBinding>
        </bindings>
        <client>
          <endpoint address="http://localhost:25000/service/" binding="basicHttpBinding"
              bindingConfiguration="BasicHttpBinding_IMyWcfService" contract="MaReferenceWebService.IMyWcfService"
              name="BasicHttpBinding_IMyWcfService" />
        </client>
      </system.serviceModel>
    </configuration>

    J'ai lu sur un site qu'une personne avait résolu son problème en rajoutant le namespace du projet courant dans le "contract" ainsi : 'contract="WPFPL.MaReferenceWebService.IMyWcfService"' mais chez moi rien y fait, je sais pas si c'est une possibilité ?
    Sinon, pour mon app.config, comment être sûr qu'il est bien "activé" ? (que mon application sait que ce fichier config concerne le projet)

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Par défaut
    Voilà une bonne nouvelle !
    Mon UserControl fonctionne désormais bien, il suffisait d'exécuter le projet malgré l'erreur qu'il me donne.
    En fait un problème critique réside mais je peux passer au travers et exécuter mon pojet WPF avec son UserControl sans soucis.

    J'ai testé sans le App.config, j'ai bel et bien récupéré l'erreur de tout à l'heure.
    J'ai testé avec le App.config mais avec une erreur d'instanciation au niveau Concepteur Graphique et il fonctionnait bien...

    As-tu une idée pourquoi il ne veut pas me laisser visualiser l'UC dans le concepteur graphique? Je peux passer outre cette erreur mais ça me gêne d'avoir un projet incohérent/pas propre...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Enumerer les controles contenus dans un UserControl en WPF
    Par elfdav dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 28/05/2010, 18h46
  2. Afficher un composant Winform dans WPF (en passant par un UserControl(WPF))
    Par karim.user dans le forum Windows Presentation Foundation
    Réponses: 17
    Dernier message: 21/04/2009, 13h00
  3. [WPF] Probléme de binding dans un UserControl :(
    Par UNi[FR] dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 17/07/2008, 15h51
  4. Insertion de UserControl WPF dans Office
    Par s.o.f dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 26/05/2008, 14h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo