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

Dotnet Discussion :

WCF Service - Portée des variables


Sujet :

Dotnet

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2019
    Messages : 11
    Points : 11
    Points
    11
    Par défaut WCF Service - Portée des variables
    bonjour a tous,

    je suis en train de developer mon premier WCF Service pour l'utiliser dans une application Xamarin pour Iphone.

    Je bloque sur un problème concernant la portée des variables entre fonctions. Voici un exemple:

    J ai une sub qui assigne une valeur a une variable et une fonction qui me retourne la valeur assignée


    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
     
     
    <ServiceBehavior(InstanceContextMode:=InstanceContextMode.PerSession)>
    <Serializable>
    Public Class TimeReport
        Implements ITimeReport
     
        Private oKey As String = String.Empty
     
    ''' <summary></summary>
        Public Sub Key(ByVal pKey As String) Implements ITimeReport.Key
     
            'Set the key
            oKey = pKey
     
        End Sub
        Public Function GetKey() As String Implements ITimeReport.GetKey
     
            'Return the key
            Return oKey
     
        End Function
     
    Ed Class

    Voici mon contrat


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <ServiceContract()>
    Public Interface ITimeReport
     
        <OperationContract()>
        Sub Key(ByVal pKey As String)
        <OperationContract()>
        Function GetKey() As String
     
    End Interface
    Voici le code qui utilise mon service. Pour l instant il est sur une winform

    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
     
     
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles cmdConnect.Click
     
            Dim mTest As New TimeReport.TimeReportClient
     
            Try
                mTest.Key("123456")
     
                MsgBox(mTest.GetKey)
            Catch mException As Exception
                'Inform user about 
                MsgBox(mException.Message)
            End Try
     
        End Sub
    Lorsque je clique sur le bouton, je m'attendraisa voir dans ma msgbox 123456, or je vois une chaine vide. Je pense que j'ai loupe quelque chose....
    A savoir que mon WCF service est installé sur un serveur IIS.

    Merci pour vos retours.

    billy21121

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    en wcf on choisit si l'instance de la classe côté service est faite pour une connexion, une session ou une requête
    j'aurais tendance à dire que tu aurais normalement du retrouver ta variable vu que tu es en session et que tu gardes la même instance de channel
    mais il vaut mieux partir du principe que de toute façon une coupure de la liaison est possible et donc ne rien stocker pour une liaison

    essaye avec la variable en Shared pour voir si c'est mieux quand même

    pour faire propre normalement la classe implémentant l'interface de service ne contient que les méthodes de la dite interface, et ses méthodes ne font qu'appeler des méthodes ici et là (genre DAL ou autre cache)

    les caches eux peuvent garder des choses liées à un client si tu en as le besoin, mais c'est à toi de coder le mécanisme de clientèle je pense (genre à la 1ère connexion envoyer un guid (+login/mdp si nécessaire)) et côté serveur garder une liste des gens connectés (prendre en compte que l'app serveur peut etre redémarrée)
    donc tu peux ajouter ce guid sur les méthodes, sinon il y a aussi operationcontext qui permet de transférer des headers à chaque requête WCF mais c'est plus complexe à coder)



    il est aussi possible côté serveur de dire que l'instance de l'interface de service est un singleton, là tout le monde partage la même du coup, je sais pas si ca peut aider ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2019
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Merci pour tes explications.
    J ai compris pourquoi mes variables ne sont pas gardées en mémoire bien que j'utilise les sessions.

    dans mon webconfig j ai les lignes suivantes

    <protocolMapping>
    <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>


    Or, les sessions ne sont pas compatibles avec basicHttpsBinding. j'ai lu cela sur plusieurs sites.

    Donc maintenant je reviens a mon problème initial, comment je peux faire pour gérer mes variables. Je ne pense pas être le seul a avoir des variables globales dans une classe.


    Je suis un peu paumé. Je me demande si je ne vais pas repartir avec un web service asmx…. mais bon j aurais préféré travailler avec les dernières technologies.


    Billy21121

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    asmx c'est vieux en effet, mais wcf bien que plus complet n'est pas tout jeune non plus
    wep api (qui t'as été conseillé sur ton autre topic) c'est plus récent

    après récent ca veux pas forcément dire que c'est vieux, wcf c'est mature et interopérable
    mais ca reste complexe à prendre en main et à approfondir
    web api les développeurs web s'en servent donc ca pas être trop compliqué ^^

    quand un développeur doit choisir une techno il peut toutes les essayer vite fait, puis chercher les limites pour voir si ca va convenir avant d'approfondir plus
    choisir un truc et être au point dans la foulée ca n'arrive pas

    sinon j'ai expliqué en partie comment tu pourrais gérer des variables (en tant que cache) par client …
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Réponses: 8
    Dernier message: 17/02/2005, 09h05
  2. [FLASH MX] Portée des variables ???
    Par mic79 dans le forum Flash
    Réponses: 2
    Dernier message: 08/02/2005, 10h21
  3. Portée des variables vbscript vers ASP
    Par Immobilis dans le forum ASP
    Réponses: 3
    Dernier message: 03/11/2004, 10h14
  4. [XSL]Problème de portée des variables
    Par djulesp dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/09/2004, 10h34
  5. [Portée] portée des variables
    Par parksto dans le forum Langage
    Réponses: 7
    Dernier message: 09/05/2004, 21h05

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