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 :

Accéder à mon service par l'URL


Sujet :

Windows Communication Foundation .NET

  1. #1
    Membre éclairé Avatar de blasil64
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 324
    Par défaut Accéder à mon service par l'URL
    Bonjour à tous,
    Je cherche à pouvoir tester mon service WCF via l'url dans mon navigateur.

    Voici mon code :
    • Mon inteface
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      [OperationContract]
              [WebInvoke(Method = "POST", UriTemplate = "Connection", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
              UserDataContract ConnectToCrimovies(string pseudo, string password);
    • L'implémentation
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      public UserDataContract ConnectToCrimovies(string pseudo, string password)
              {
                  return UserDataContract.Connexion(pseudo, password);
              }
    • Le dataContract
      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
      49
      [DataMember(Order = 1)]
              public int Id { get; set; }
       
              [DataMember(Order = 2)]
              public string Pseudo { get; set; }
       
              [DataMember(Order = 3)]
              public string Email { get; set; }
       
              [DataMember(Order = 4)]
              public bool IsErrorConnection { get; set; }
       
              [DataMember(Order = 5)]
              public string ErrorMessage { get; set; }
       
      #region Constructor
       
              public UserDataContract(int id, string email, string pseudo, bool isErrorConnection)
              {
                  Id = id;
                  Email = email;
                  Pseudo = pseudo;
                  IsErrorConnection = isErrorConnection;
              }
       
              #endregion
       
      public static UserDataContract Connexion(string pseudo, string password)
              {
                  var user = (from u in Model.Utilisateurs
                              where u.Pseudo.Equals(pseudo)
                              select u).FirstOrDefault();
       
                  var passwordHash = EncryptSha1(password, Encoding.UTF8);
       
                  if (user != null && passwordHash.Equals(user.PasswordEncrypt))
                  {
                      if (user.IsActive != false)
                      {
                          if (WebOperationContext.Current != null)
                              WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.OK;
                          return new UserDataContract(user.IdUtilisateur, user.Email, user.Pseudo, false);
                      }
                      return new UserDataContract(user.IdUtilisateur, user.Email, user.Pseudo, true, "Votre compte a été désactivé.");
                  }
                  if (WebOperationContext.Current != null)
                      WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.NotFound;
                  return new UserDataContract(true, "Mauvaise combinaison Login / Mot de passe.");
              }



    Si je teste mon service avec le WCF Test Client, que j'inscris mon pseudo avec mon mot de passe, j'ai un résultat qui correspond (mon id, mon email...).

    Mais si je tente d'accéder via le navigateur à ma méthode, j'ai une page blanche qui est affichée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://localhost:3097/CrimoviesService.svc/Connection/monPseudo/MonMotDePasse
    Cette page blanche s'affiche aussi lorsque je change le type de retour en XML à l aplace de JSON.

    Auriez-vous un conseil ?

    Merci d'avance pour votre aide !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Je pense que l'url pour accéder à la méthode de ton service serait plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://localhost:3097/CrimoviesService.svc/Connection?pseudo=monPseudo&password=MonMotDePasse
    et en UriTemplate mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UriTemplate = "Connection?pseudo={pseudo}&password={password}"

  3. #3
    Membre éclairé Avatar de blasil64
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 324
    Par défaut
    Merci pour cette réponse.

    J'ai appliqué les modifications, mais cela ne fonctionne toujours pas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [OperationContract]
            [WebInvoke(Method = "POST", UriTemplate = "Connection?pseudo={pseudo}&password={password}", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
            UserDataContract ConnectToCrimovies(string pseudo, string password);
    URL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://localhost:3097/CrimoviesService.svc/Connection?pseudo=monpseudo&password=monpassword
    J'ai aussi testé cette URI template, mais sans résultat...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Connection/{pseudo}/{password}
    Que puis-je faire d'autre ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Installes Fiddler et regardes ce qui se passe réellement.

    Et essaies de communiquer directement avec ton service en utilisant toujours Fiddler.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Une autre question.

    Peut-on voir la configuration de ton service dans le fichier de confugation? Juste la section <system.serviceModel>.

  6. #6
    Membre éclairé Avatar de blasil64
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 324
    Par défaut
    Alors Fiddler est installé. Voici le résultat lorsque je tente d'accéder à l'url suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GET /CrimoviesService.svc/Connection?pseudo=crimovies&password=bresWEM3 HTTP/1.1
    J'ai le code HTTP 400.
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    Onglet Statistics : 
    Request Count:   1
    Bytes Sent:      460		(headers:460; body:0)
    Bytes Received:  201		(headers:201; body:0)
     
    ACTUAL PERFORMANCE
    --------------
    ClientConnected:	17:45:42.238
    ClientBeginRequest:	17:45:42.242
    GotRequestHeaders:	17:45:42.242
    ClientDoneRequest:	17:45:42.242
    Determine Gateway:	0ms
    DNS Lookup: 		0ms
    TCP/IP Connect:	0ms
    HTTPS Handshake:	0ms
    ServerConnected:	17:45:42.243
    FiddlerBeginRequest:	17:45:42.243
    ServerGotRequest:	17:45:42.243
    ServerBeginResponse:	17:45:42.285
    GotResponseHeaders:	17:45:42.286
    ServerDoneResponse:	17:45:42.286
    ClientBeginResponse:	17:45:42.286
    ClientDoneResponse:	17:45:42.286
     
    	Overall Elapsed:	00:00:00.0440025
     
    RESPONSE BYTES (by Content-Type)
    --------------
    ~headers~:	201
     
     
    ESTIMATED WORLDWIDE PERFORMANCE
    --------------
    The following are VERY rough estimates of download times when hitting servers based in WA, USA.
     
    US West Coast (Modem - 6KB/sec)
    	RTT:		0,10s
    	Elapsed:	0,10s
     
    Japan / Northern Europe (Modem)
    	RTT:		0,15s
    	Elapsed:	0,15s
     
    China (Modem)
    	RTT:		0,45s
    	Elapsed:	0,45s
     
    US West Coast (DSL - 30KB/sec)
    	RTT:		0,10s
    	Elapsed:	0,10s
     
    Japan / Northern Europe (DSL)
    	RTT:		0,15s
    	Elapsed:	0,15s
     
    China (DSL)
    	RTT:		0,45s
    	Elapsed:	0,45s
     
     
    ================
    Learn more about HTTP performance at http://fiddler2.com/r/?HTTPPERF
    Voici le contenu de mon web.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
    <system.serviceModel>
        <behaviors>
          <serviceBehaviors>
            <behavior>
              <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
              <serviceMetadata httpGetEnabled="true" />
              <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
              <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
      </system.serviceModel>

  7. #7
    Invité
    Invité(e)
    Par défaut
    Dans ton fichier de configuration ajoutes l'élément <webHttp /> dans l'élément <behavior> :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <behavior>
              // ***** des données existantes ******
             <webHttp/>
    </behavior>
    Avec un éditeur de texte, ouvres le fichier *.svc, mets la valeur WebServiceHostFactory à l'attribut Factory.

  8. #8
    Membre éclairé Avatar de blasil64
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 324
    Par défaut
    Je ne peux pas ajouter la ligne <webHttp /> dans mon web.config, elle n'est pas reconnu. Du coup quand je lance mon WCF Test Application, il génère une erreur.

    J'ai pu mettre le factory dans le .svc, mais du coup, je suppose qu'il faille mettre la balise dans le web.config, car actuellement, j'ai cette erreur :
    Server Error in '/' Application.

    Parser Error

    Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately.

    Parser Error Message: The CLR Type 'WebServiceHostFactory' could not be loaded during service compilation. Verify that this type is either defined in a source file located in the application's \\App_Code directory, contained in a compiled assembly located in the application's \\bin directory, or present in an assembly installed in the Global Assembly Cache. Note that the type name is case-sensitive and that the directories such as \\App_Code and \\bin must be located in the application's root directory and cannot be nested in subdirectories.

    Source Error:


    Line 1: <%@ ServiceHost Language="C#" Debug="true" Service="CrimoviesService.CrimoviesService" CodeBehind="CrimoviesService.svc.cs" Factory="WebServiceHostFactory" %>

    Source File: /CrimoviesService.svc Line: 1
    Merci pour ton aide !

  9. #9
    Invité
    Invité(e)
    Par défaut
    L'élément <webHttp /> est nécessaire pour que tes requêtes marchent via un navigateur.
    En fait c'est moi qui me suit trompé la bonne syntaxe est la suivante :
    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
     
    <behaviors>
    <serviceBehaviors>
            <behavior>
              <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
              <serviceMetadata httpGetEnabled="true" />
              <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
              <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
          </serviceBehaviors>
    <endpointBehaviors>
    	<behavior>
    		<webHttp/>
    	</behavior>
    </endpointBehaviors>
    </behaviors>

    Pour l'attribut Factory ajoutes le namespace : System.ServiceModel.Activation soit Factory="System.ServiceModel.Activation.WebServiceHostFactory"

  10. #10
    Membre éclairé Avatar de blasil64
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 324
    Par défaut
    Ok, je pense qu'on avance.

    Malheureusement, j'ai l'erreur suivante avec la configuration précédente :
    Endpoint not found.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Voici un petit projet exemple qui marche chez moi sans problème Mais là sans le Factory.
    Fichiers attachés Fichiers attachés

  12. #12
    Membre éclairé Avatar de blasil64
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 324
    Par défaut
    Salut,
    J'ai analysé ton projet, et j'ai trouvé comment obtenir mes informations depuis l'URL.

    Il fallait que je modifie mon web.config en ajoutant l'élément suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <services>
              <service name="CrimoviesService.CrimoviesService">
                  <endpoint address="" binding="webHttpBinding" contract="CrimoviesService.ICrimovies" behaviorConfiguration="endpointBehavior" />
                  <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
              </service>
          </services>
    J'ai supprimé le Factory aussi.

    Merci beaucoup pour ton aide !

  13. #13
    Invité
    Invité(e)
    Par défaut
    Normalement cela devrait marcher avec le Factory WebServiceHostFactory qui devait se charger de configurer de façon automatique tout ce qui est mis dans le fichier de configuration mis à part l'exposition des métadonnées. Mais en l'utilisant on a l'erreur "Endpoint not found" et on est pas les seuls à l'avoir. Une recherche m'a permis de savoir que pas mal de personnes y sont tombées comme par exemple ici ou un développeur a résolu le bug mais de façon magique sans rien modifier

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

Discussions similaires

  1. accéder à mon ordinateur par ftp
    Par cijez dans le forum Windows 7
    Réponses: 3
    Dernier message: 30/10/2011, 17h00
  2. Réponses: 9
    Dernier message: 12/01/2011, 18h38
  3. Méthode toString d'une classe exposée par mon service WCF
    Par duvelmoi9 dans le forum Windows Communication Foundation
    Réponses: 5
    Dernier message: 24/12/2010, 00h16
  4. Réponses: 18
    Dernier message: 10/05/2010, 23h05
  5. [Continuum] accéder au pom dans cvs par une url
    Par izyl_ dans le forum Intégration Continue
    Réponses: 9
    Dernier message: 04/05/2009, 11h40

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