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

Windows Communication Foundation .NET Discussion :

WCF Duplex


Sujet :

Windows Communication Foundation .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 59
    Par défaut WCF Duplex
    Bonjour à tous,

    J'ai essayé de mettre en place un service WCF Duplex très simple, en suivant cet exemple.

    J'ai donc créé mes deux interfaces :

    Code : 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
    using System.ServiceModel;
     
    namespace DuplexServeur
    {
        [ServiceContract(CallbackContract = typeof(IMyContractCallbak))]
        public interface IServiceHelloWorld
        {
            [OperationContract(IsOneWay = true)]
            void normalFunction();
        }
     
        [ServiceContract]
        public interface IMyContractCallbak
        {
            [OperationContract(IsOneWay = true)]
            void callBackFunction(string str);
        }
     
    }

    Ainsi que mon service WCF :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    using System.ServiceModel;
     
    namespace DuplexServeur
    {
        [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
        public class ServiceHelloWorld : IServiceHelloWorld
        {
            public void normalFunction()
            {
                IMyContractCallbak callback = OperationContext.Current.GetCallbackChannel<IMyContractCallbak>();
                callback.callBackFunction("hello !");
            }
        }
    }

    J'ai paramétré comme expliqué dans l'article le web.config

    Code : 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <?xml version="1.0"?>
    <configuration>
     
      <system.web>
        <compilation debug="true" targetFramework="4.0" />
      </system.web>
      <system.serviceModel>
     
        <behaviors>
          <serviceBehaviors>
            <behavior name ="svcbh">
              <serviceMetadata httpGetEnabled="False"/>
              <serviceDebug includeExceptionDetailInFaults="False"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
     
        <services>
     
          <service name="DuplexServer.ServiceHelloWorld" behaviorConfiguration="svcbh">
     
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:9000/ServiceHelloWorld/" />
              </baseAddresses>
            </host>
     
            <endpoint name="duplexendpoint"
                      address=""
                      binding="wsDualHttpBinding"
                      contract="DuplexServer.IServiceHelloWorld" />
     
            <endpoint name="MetaDataTcpEndPoint"
                      address="mex"
                      binding="mexHttpBinding"
                      contract="IMetaDataExchange" />
     
          </service>
     
        </services>
     
     
        </system.serviceModel>
      <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
      </system.webServer>
     
    </configuration>

    Puis j'ai voulu testé (en local) dans le navigateur ce qui était généré (le wsdl).

    Cependant quand j'ouvre donc l'adresse http://localhost:4528/ServiceHelloWorld.svc

    Il y a une erreur :

    Server Error in '/' Application.

    Le contrat exige le mode Duplex mais la liaison 'BasicHttpBinding' ne le prend pas en charge, ou elle n'est pas configurée correctement pour cela.

    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.InvalidOperationException: Le contrat exige le mode Duplex mais la liaison 'BasicHttpBinding' ne le prend pas en charge, ou elle n'est pas configurée correctement pour cela.

    Source Error:

    An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

    Stack Trace:


    [InvalidOperationException: Le contrat exige le mode Duplex mais la liaison 'BasicHttpBinding' ne le prend pas en charge, ou elle n'est pas configurée correctement pour cela.]
    System.ServiceModel.Description.DispatcherBuilder.BuildChannelListener(StuffPerListenUriInfo stuff, ServiceHostBase serviceHost, Uri listenUri, ListenUriMode listenUriMode, Boolean supportContextSession, IChannelListener& result) +12218074
    System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription description, ServiceHostBase serviceHost) +1228
    System.ServiceModel.ServiceHostBase.InitializeRuntime() +60
    System.ServiceModel.ServiceHostBase.OnBeginOpen() +27
    System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout) +50
    System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) +318
    System.ServiceModel.Channels.CommunicationObject.Open() +36
    System.ServiceModel.HostingManager.ActivateService(String normalizedVirtualPath) +184
    System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath) +615

    [ServiceActivationException: The service '/ServiceHelloWorld.svc' cannot be activated due to an exception during compilation. The exception message is: Le contrat exige le mode Duplex mais la liaison 'BasicHttpBinding' ne le prend pas en charge, ou elle n'est pas configurée correctement pour cela..]
    System.Runtime.AsyncResult.End(IAsyncResult result) +679246
    System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) +190
    System.ServiceModel.Activation.HostedHttpRequestAsyncResult.ExecuteSynchronous(HttpApplication context, String routeServiceVirtualPath, Boolean flowContext, Boolean ensureWFService) +234
    System.ServiceModel.Activation.HttpModule.ProcessRequest(Object sender, EventArgs e) +355
    System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +148
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75
    A partir de là, impossible d'ajouter la référence à ce webservice dans mon application cliente.


    Pouvez-vous m'éclairer sur la source de mon erreur ?

    Merci à tous.

    Cordialement.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Tui hébverges ton application dans une application managée (Application console, WPF, Winform, Service windows) ou IIS ou tout simplement via le serveur web de VS ?

    De plus dans la configuration tu as mis comme adresse de base l'adresse suivante : http://localhost:9000/ServiceHelloWorld/.
    alors que tu veux y accéder par : http://localhost:4528/ServiceHelloWorld.svc. tu trouves pas que cela est incorrect ?

  3. #3
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Y'a un mismatch des namespaces!
    Dans ton C# c'est : namespace DuplexServeur
    Dans ta config c'est : <service name="DuplexServer.ServiceHelloWorld">

  4. #4
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 59
    Par défaut
    Merci beaucoup pour votre réactivité.

    A bientôt.

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

Discussions similaires

  1. WCF duplex et connexion continue ?
    Par alucia dans le forum Windows Communication Foundation
    Réponses: 6
    Dernier message: 09/12/2013, 13h40
  2. Réponses: 6
    Dernier message: 21/07/2011, 12h38
  3. Asynchro dans un service WCF Duplex
    Par Z4ng3tsu dans le forum Services Web
    Réponses: 3
    Dernier message: 14/05/2010, 13h41
  4. Création d'un service WCF Duplex
    Par Z4ng3tsu dans le forum Services Web
    Réponses: 3
    Dernier message: 07/05/2010, 15h32
  5. Polling Duplex WCF Service compatible Silverlight / WPF
    Par faabriice dans le forum Windows Communication Foundation
    Réponses: 2
    Dernier message: 15/12/2008, 18h34

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