Précédent   Forum des professionnels en informatique > Dotnet > Général Dotnet > Windows Communication Foundation
Windows Communication Foundation Forum d'entraide sur la technologie de communication inter-applications de Microsoft
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/02/2012, 16h31   #1
Membre régulier
 
Avatar de blasil64
 
Guillaume Calmels
Étudiant
Inscription : octobre 2008
Messages : 307
Détails du profil
Informations personnelles :
Nom : Guillaume Calmels
Âge : 23

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2008
Messages : 307
Points : 90
Points : 90
Envoyer un message via MSN à blasil64 Envoyer un message via Skype™ à blasil64
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 :
    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 :
    1
    2
    3
    4
    public UserDataContract ConnectToCrimovies(string pseudo, string password)
            {
                return UserDataContract.Connexion(pseudo, password);
            }
  • Le dataContract
    Code :
    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 :
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 !
blasil64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 17h13   #2
Modérateur
 
Avatar de h2s84
 
Homme Holty Samba SOW
Développeur .NET
Inscription : mars 2007
Messages : 2 393
Détails du profil
Informations personnelles :
Nom : Homme Holty Samba SOW
Âge : 27
Localisation : Sénégal

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

Informations forums :
Inscription : mars 2007
Messages : 2 393
Points : 4 089
Points : 4 089
Envoyer un message via MSN à h2s84 Envoyer un message via Skype™ à h2s84
Je pense que l'url pour accéder à la méthode de ton service serait plutôt

Code :
http://localhost:3097/CrimoviesService.svc/Connection?pseudo=monPseudo&password=MonMotDePasse
et en UriTemplate mettre

Code :
1
2
 
UriTemplate = "Connection?pseudo={pseudo}&password={password}"
__________________
Les FAQs sur les technologies .Net voir ici
Les cours et tutos sur les technologies .Net voir ici
Les critiques sur les livres parlant des technologies .Net voir ici
Pensez à la balise [CODE]
Pensez au tag si votre problème est résolu

While(!success) { TryAgain(); }
h2s84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 17h22   #3
Membre régulier
 
Avatar de blasil64
 
Guillaume Calmels
Étudiant
Inscription : octobre 2008
Messages : 307
Détails du profil
Informations personnelles :
Nom : Guillaume Calmels
Âge : 23

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2008
Messages : 307
Points : 90
Points : 90
Envoyer un message via MSN à blasil64 Envoyer un message via Skype™ à blasil64
Merci pour cette réponse.

J'ai appliqué les modifications, mais cela ne fonctionne toujours pas...
Code :
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 :
http://localhost:3097/CrimoviesService.svc/Connection?pseudo=monpseudo&password=monpassword
J'ai aussi testé cette URI template, mais sans résultat...
Code :
Connection/{pseudo}/{password}
Que puis-je faire d'autre ?
blasil64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 17h30   #4
Modérateur
 
Avatar de h2s84
 
Homme Holty Samba SOW
Développeur .NET
Inscription : mars 2007
Messages : 2 393
Détails du profil
Informations personnelles :
Nom : Homme Holty Samba SOW
Âge : 27
Localisation : Sénégal

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

Informations forums :
Inscription : mars 2007
Messages : 2 393
Points : 4 089
Points : 4 089
Envoyer un message via MSN à h2s84 Envoyer un message via Skype™ à h2s84
Installes Fiddler et regardes ce qui se passe réellement.

Et essaies de communiquer directement avec ton service en utilisant toujours Fiddler.
__________________
Les FAQs sur les technologies .Net voir ici
Les cours et tutos sur les technologies .Net voir ici
Les critiques sur les livres parlant des technologies .Net voir ici
Pensez à la balise [CODE]
Pensez au tag si votre problème est résolu

While(!success) { TryAgain(); }
h2s84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 17h42   #5
Modérateur
 
Avatar de h2s84
 
Homme Holty Samba SOW
Développeur .NET
Inscription : mars 2007
Messages : 2 393
Détails du profil
Informations personnelles :
Nom : Homme Holty Samba SOW
Âge : 27
Localisation : Sénégal

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

Informations forums :
Inscription : mars 2007
Messages : 2 393
Points : 4 089
Points : 4 089
Envoyer un message via MSN à h2s84 Envoyer un message via Skype™ à h2s84
Une autre question.

Peut-on voir la configuration de ton service dans le fichier de confugation? Juste la section <system.serviceModel>.
__________________
Les FAQs sur les technologies .Net voir ici
Les cours et tutos sur les technologies .Net voir ici
Les critiques sur les livres parlant des technologies .Net voir ici
Pensez à la balise [CODE]
Pensez au tag si votre problème est résolu

While(!success) { TryAgain(); }
h2s84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 17h49   #6
Membre régulier
 
Avatar de blasil64
 
Guillaume Calmels
Étudiant
Inscription : octobre 2008
Messages : 307
Détails du profil
Informations personnelles :
Nom : Guillaume Calmels
Âge : 23

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2008
Messages : 307
Points : 90
Points : 90
Envoyer un message via MSN à blasil64 Envoyer un message via Skype™ à blasil64
Alors Fiddler est installé. Voici le résultat lorsque je tente d'accéder à l'url suivante :
Code :
GET /CrimoviesService.svc/Connection?pseudo=crimovies&password=bresWEM3 HTTP/1.1
J'ai le code HTTP 400.
Code :
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 :
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>
blasil64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 18h07   #7
Modérateur
 
Avatar de h2s84
 
Homme Holty Samba SOW
Développeur .NET
Inscription : mars 2007
Messages : 2 393
Détails du profil
Informations personnelles :
Nom : Homme Holty Samba SOW
Âge : 27
Localisation : Sénégal

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

Informations forums :
Inscription : mars 2007
Messages : 2 393
Points : 4 089
Points : 4 089
Envoyer un message via MSN à h2s84 Envoyer un message via Skype™ à h2s84
Dans ton fichier de configuration ajoutes l'élément <webHttp /> dans l'élément <behavior> :
Code xml :
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.
__________________
Les FAQs sur les technologies .Net voir ici
Les cours et tutos sur les technologies .Net voir ici
Les critiques sur les livres parlant des technologies .Net voir ici
Pensez à la balise [CODE]
Pensez au tag si votre problème est résolu

While(!success) { TryAgain(); }
h2s84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 18h57   #8
Membre régulier
 
Avatar de blasil64
 
Guillaume Calmels
Étudiant
Inscription : octobre 2008
Messages : 307
Détails du profil
Informations personnelles :
Nom : Guillaume Calmels
Âge : 23

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2008
Messages : 307
Points : 90
Points : 90
Envoyer un message via MSN à blasil64 Envoyer un message via Skype™ à blasil64
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 :
Citation:
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 !
blasil64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 19h31   #9
Modérateur
 
Avatar de h2s84
 
Homme Holty Samba SOW
Développeur .NET
Inscription : mars 2007
Messages : 2 393
Détails du profil
Informations personnelles :
Nom : Homme Holty Samba SOW
Âge : 27
Localisation : Sénégal

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

Informations forums :
Inscription : mars 2007
Messages : 2 393
Points : 4 089
Points : 4 089
Envoyer un message via MSN à h2s84 Envoyer un message via Skype™ à h2s84
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 :
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"
__________________
Les FAQs sur les technologies .Net voir ici
Les cours et tutos sur les technologies .Net voir ici
Les critiques sur les livres parlant des technologies .Net voir ici
Pensez à la balise [CODE]
Pensez au tag si votre problème est résolu

While(!success) { TryAgain(); }
h2s84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 19h42   #10
Membre régulier
 
Avatar de blasil64
 
Guillaume Calmels
Étudiant
Inscription : octobre 2008
Messages : 307
Détails du profil
Informations personnelles :
Nom : Guillaume Calmels
Âge : 23

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2008
Messages : 307
Points : 90
Points : 90
Envoyer un message via MSN à blasil64 Envoyer un message via Skype™ à blasil64
Ok, je pense qu'on avance.

Malheureusement, j'ai l'erreur suivante avec la configuration précédente :
Citation:
Endpoint not found.
blasil64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 23h07   #11
Modérateur
 
Avatar de h2s84
 
Homme Holty Samba SOW
Développeur .NET
Inscription : mars 2007
Messages : 2 393
Détails du profil
Informations personnelles :
Nom : Homme Holty Samba SOW
Âge : 27
Localisation : Sénégal

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

Informations forums :
Inscription : mars 2007
Messages : 2 393
Points : 4 089
Points : 4 089
Envoyer un message via MSN à h2s84 Envoyer un message via Skype™ à h2s84
Voici un petit projet exemple qui marche chez moi sans problème Mais là sans le Factory.
Fichiers attachés
Type de fichier : zip WebApplicationTest.zip (156,3 Ko, 3 affichages)
__________________
Les FAQs sur les technologies .Net voir ici
Les cours et tutos sur les technologies .Net voir ici
Les critiques sur les livres parlant des technologies .Net voir ici
Pensez à la balise [CODE]
Pensez au tag si votre problème est résolu

While(!success) { TryAgain(); }
h2s84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 10h26   #12
Membre régulier
 
Avatar de blasil64
 
Guillaume Calmels
Étudiant
Inscription : octobre 2008
Messages : 307
Détails du profil
Informations personnelles :
Nom : Guillaume Calmels
Âge : 23

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2008
Messages : 307
Points : 90
Points : 90
Envoyer un message via MSN à blasil64 Envoyer un message via Skype™ à blasil64
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 :
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 !
blasil64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 11h01   #13
Modérateur
 
Avatar de h2s84
 
Homme Holty Samba SOW
Développeur .NET
Inscription : mars 2007
Messages : 2 393
Détails du profil
Informations personnelles :
Nom : Homme Holty Samba SOW
Âge : 27
Localisation : Sénégal

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

Informations forums :
Inscription : mars 2007
Messages : 2 393
Points : 4 089
Points : 4 089
Envoyer un message via MSN à h2s84 Envoyer un message via Skype™ à h2s84
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
__________________
Les FAQs sur les technologies .Net voir ici
Les cours et tutos sur les technologies .Net voir ici
Les critiques sur les livres parlant des technologies .Net voir ici
Pensez à la balise [CODE]
Pensez au tag si votre problème est résolu

While(!success) { TryAgain(); }
h2s84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h12.


 
 
 
 
Partenaires

Hébergement Web