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 & Best Practises


Sujet :

Windows Communication Foundation .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 121
    Par défaut WCf & Best Practises
    Bonjour à tous j'ai encore un niveau très faible en WCF, et je me pose des questions qui vont vous paraître assez bête mais je préfère les poser histoire d'avoir quelques certitudes sur certains point.

    Tout d'abord j'aimerais savoir quelle est la méthode conseillé concernant les instances du proxy, est ce qu'il vaut mieux un seul proxy pour toute l'application, un proxy par Form,ou un proxy pour chaque Call effectué et si une des méthodes est plus conseillé qu'une autre, ben pourquoi ?

    La question suivante porte sur la gestion des événements quelle est la méthode la plus propre pour s'abonner et se désabonner :

    1) S'abonnez à tous les événements nécessaires sur le Loaded et se désabonner de tout les événements dans un événement Unloaded

    2)S'abonner avant l'appel asynchrone et se désabonner dans l'événement completed

    3)Se désabonner et s'abonner avant l'appel asynchrone

    J'aimerais aussi savoir s'il y'a une différence entre sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    _soap.job_description_approval_GetByJobDescCompleted += new EventHandler<job_description_approval_GetByJobDescCompletedEventArgs>(_soap_job_description_approval_GetByJobDescCompleted);
     
    _soap.job_description_approval_GetByJobDescCompleted -= new EventHandler<job_description_approval_GetByJobDescCompletedEventArgs>(_soap_job_description_approval_GetByJobDescCompleted);
    et ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    _soap.job_description_approval_GetByJobDescCompleted += _soap_job_description_approval_GetByJobDescCompleted;
     
    _soap.job_description_approval_GetByJobDescCompleted -= _soap_job_description_approval_GetByJobDescCompleted;
    Merci

  2. #2
    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
    -Un service global pour l'appli je dirais, ca me semble mieux pour une séparation en couches et je pense que WCF a été concu pour gérer correctement (ca serait comme réimplémenter un pooling pour la BDD)
    -La réponse 2
    -Non, pas de différences

    J'ai bon?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 121
    Par défaut
    Merci PitMaverick

    Concernant la première question sa serait sympa d'avoir plusieurs avis pour voir un peu "en général" ce qui est fait dans la pratique

    Une autre question, est ce quelqu'un a déjà entendu parler de sa et est ce que sa fonctionne :

    If you don’t call the “Open” method first, the proxy would be opened internally when the first call is made on the proxy. This is called auto-open.

    Why? When the first message is sent through the auto-opened proxy, it will cause the proxy to be opened automatically. You can use .NET Reflector to open the method System.ServiceModel.Channels.ServiceChannel.Call and see the following code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if (!this.explicitlyOpened)
     
            {
     
                this.EnsureDisplayUI();
     
                this.EnsureOpened(rpc.TimeoutHelper.RemainingTime());
     
            }
    When you drill down into EnsureOpened, you will see that it calls CallOnceManager.CallOnce. For non-first calls, you would hit SyncWait.Wait which waits for the first request to complete. This mechanism is to ensure that all requests wait for the proxy to be opened and it also ensures the correct execution order. Thus all requests are serialized into a single execution sequence until all requests are drained out from the queue. This is not a desired behavior in most cases.

    To avoid such “serializing” artifact, the best practice is to open the proxy explicitly as above. Once you get to this point, you will be able to share the same proxy object among multiple threads.
    En utilisant qu'un seul et unique proxy, imaginant qu'une erreur se produit sur un des appels est ce que le proxy va continuer à faire les autres appels ?

  4. #4
    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
    Erf, personellement je deconseillerais l'Auto-Open.
    Quand explicitement tu ouvres ton canal, tu es certain du résultat. Mais si tu laisses wcf ouvrir, ca peut planter en plein milieu de ton code métier. Personellement, je vois pas l'interêt de cet Auto-Open

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 121
    Par défaut
    Pour quelle raison sa pourrait planter ?

    Encore une question idiote (oui c'est ma journée), vu que l'on peut faire qu'un OpenAsync() en Silverlight, faut donc que j'attende le completed de cette open avant de faire quoi que ce soit ?

  6. #6
    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
    Les erreurs de communication pouvant faire planter sont multiples.
    Personellement, je suis plutôt adepte de faire un service qui s'ouvre au lancement de l'application et qui est interrogé quand on en a besoin plutôt que commencer à faire du Just In Time. Y'a beaucoup plus de moyens d'optimiser que de faire du JIT la dessus (je dirais presque que c'est à faire en dernier recours!)

Discussions similaires

  1. [1.x] Jointure Best Practises
    Par psgman113 dans le forum Symfony
    Réponses: 11
    Dernier message: 20/04/2010, 15h49

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