none
[vb.net | Vs2008 | WebServices] Le serveur distant a retourné une erreur RRS feed

  • Question

  • Bonjour

    Je patauge un peu avec l'exploitation de mon web service.
    J'ai trouvé ce petit tutorial :
    http://www.codeguru.com/vb/vb_intern...icle.php/c4813.


    J'ai donc ajouter un Service Références :
    J'ai indiqué l'adresse du .WSDL et j'ai saisit les informations d'authentifications pour permettre l'ajout de la référence.
    J'ai renommé mon espace de nom en : "WsKelioTest" et j'obtiens l'arborescence pour ce service suivant :

    - WSKelioTest => espace de nom
    
       |___AbsenceFileService.wsdl
    
       |___configuration.svcinfo
    
       |___configuration91.svcinfo
    
       |___Reference.svcmap
    
               |___projet_Kelio.WsKelioTest.AbsenceFile.datasource
    
               |___Reference.vb
    
    

    J'ai ensuite essayé d'interroger mon service web

    Public Sub WebServices(ByVal datedebut As Date, ByVal datefin As Date)
    
    
    
            'déclaration de l'objet Webservices
    
            Dim ObjWS As WsKelioTest.AbsenceFileServicePortTypeClient = New WsKelioTest.AbsenceFileServicePortTypeClient
    
            'variable pour stocker les réponses
    
            Dim response() As WsKelioTest.AbsenceFile
    
    
    
            Try
    
                response = ObjWS.exportAbsenceFilesLimitedToAPeriod("", "", startDate:=datedebut, endDate:=datefin)
    
            Catch ex As Exception
    
                MsgBox(ex.ToString)
    
            End Try
    
    End Sub
    
    
    Cependant quand je test ce code j'obtient un message d'erreur à l'exection :

    erreur sur le webservices :
    La demande HTTP n’est pas autorisée avec un modèle d’authentification client « Anonymous ».
    L’en-tête d’authentification reçu du serveur était « Basic realm=""Bodet Realm"" ».  Le serveur distant a retourné une erreur(401) Non autorisé.

    j'ai donc effectué quelque recherche ici :

    http://support.microsoft.com/kb/811318

    cependant je n'ai pas bien compris la démarche plus particulièrement d'ou sor l'élément myproxy ....

    Si qqn a un tuyaux je suis preneur

    cordialelement

    ++

    mardi 9 mars 2010 14:16

Réponses

  • Bonjour,

    Bon j'ai trouvé comment interroger mes webservices :

    La modification du fichier de configuration pour l'authentification au webServices n'était pas pris en compte. La j'ai essaye avec les anciens id / mdp.

    Ensuite à l'ajout de la référence je n'ai pas saisit d'id / mdp

    enfin j'ai utilisé se code vb.net :
    Public Sub WebServices(ByVal datedebut As Date, ByVal datefin As Date)
    
            Dim ObjWS As com.evobus.ligny.keliotest.AbsenceFileService = New com.evobus.ligny.keliotest.AbsenceFileService
            Dim cache As CredentialCache = New CredentialCache
            Dim response() As com.evobus.ligny.keliotest.AbsenceFile
    
            Try
                'cache.Add(New Uri(ObjWS.Url), "Negociate", New NetworkCredential("", "", ""))
                cache.Add(New Uri(ObjWS.Url), "Basic", New NetworkCredential("mon_id", "mon_mdp", ""))
                ObjWS.Credentials = cache
                response = ObjWS.exportAbsenceFilesLimitedToAPeriod("", "", datedebut, datefin)
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
        End Sub
    voil
    jeudi 11 mars 2010 12:24

Toutes les réponses

  • Bonsoir,

    dans ton cas l'objet proxy est l'objet ObjWS. C'est à partir de cet objet créé dans l'application cliente que tu peux appeler les fonctionnalités du webservice de façon transparente.

    Le lien vers le tutorial ne fonctionne pas. Je ne sais donc pas si tu as toi même développer le webservice et si l'appel est effectué via WCF ou non mais soit :
    - tu autorises l'accès anonyme à ton webservice ( en activant ce mode d'authentification sur IIS )
    - ou tu précises les informations d'authentification via le proxy

    Cordialement
    mardi 9 mars 2010 18:12
    Modérateur
  • Bonjour

    Le premier lien ne semble pas fonctionner sous IE, j'utilise Mozilla comme autre navigateur en plus d'IE.

    Je ne suis pas le développeur du Webservice, je ne fait que l'interroger depuis l'application que je suis en train de développer.

    Comment puis-je déterminer l'outil via lequel j'effectue l'appel ?

    Par contre je viens de me rendre compte que je faisais l'ajout de la référence à mon service web au mauvaise endroit.

    Sous Vs 2008 :

    - Dans l'explorateur de Solution
    - Click droit sur Service References
    - Ajouter une référence de service

    Et c la que je fait une erreur c'est que je renseigner les informations directement ici.

    Alors qu'il faut a cette endroit :

    - Cliquer sur Avancé
    - Cliquer sur Ajouter une référence Web ...

    Et la on arrive dans la bonne interface des WebService :

    - Dans l'url j'ai saisit l'adresse de mon WSDL
    - Cliquer sur Aller à
    - Indiquer les identifiant / mdp pour le webservices

    Et la dans l'explorateur de solution j'ai un nouveau répertoire "Web References" avec cette arborescence :

    - com.[ma_societe].[mon_site].Keliotest
      |___AbsenceFileService.Wsdl
      |___Reference.map
              |___AbsenceFile.datasource
              |___Reference.vb


    et dans mon code ca donne ceci en m'inspirant du tutorial suivant pour l'ajout du credentials :

    [url]http://support.microsoft.com/kb/811318[/url]

    Public Sub WebServices(ByVal datedebut As Date, ByVal datefin As Date)
    
            Dim ObjWS com.[ma_societe].[mon_site].Keliotest.AbsenceFileService = New com.[ma_societe].[mon_site].Keliotest.AbsenceFileService
            Dim cache As CredentialCache = New CredentialCache
            Dim response() As com.[ma_societe].[mon_site].Keliotest.AbsenceFile
    
            Try
                cache.Add(New Uri(ObjWS.Url), "Negociate", New NetworkCredential("identifiant", "Mdp", ""))
                ObjWS.Credentials = cache
                response = ObjWS.exportAbsenceFilesLimitedToAPeriod("", "", datedebut, datefin)
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
        End Sub
    

    J'ai actuellement encore une erreur qui est la suivante :

    [quote]la demande a échoué avec l'état HTTP 401 : Authentification incorrecte[/quote]

    Mais la je vais continuer mes recherche

    De plus si quelqu'un peut m'expliquer la différence entre Service Reference et Web Référence, et surtout lequel est le mieux pour la requête sur un Webservice? Parce que la je n'ai pas encore saisit toute la nuance.

    De plus je ne comprend pas pourquoi le le dossier Web References n'apparait pas par défaut dans l'aborescence de la solution. Y a-t-il une option à activer pour cela?

    Voila voila

    encore merci pour ta réponse

    Je continue mes recherche

    ++

    mercredi 10 mars 2010 08:29
  • Bonjour,

    effectivement il y a aujourd'hui deux façon de référencer les web services si tu travailles avec VS2008:
    - via Web Reference : cela génère le proxy avec un utilitaire nommé wsdl.exe. C'était le solution jusqu'à la version 2.0 du framework .Net
    - Via Service Reference : cela génère le proxy via l'utilitiare svcutil.exe. Dans ce cas le proxy généré est de type WCF ( Windows Communication Foundation ). Cette solution est apparue avec la version 3.0 du framework ( et donc dans visual studio 2008 avec la v3.5 ). Cette solution est mise en avant dans VS2008 et tu ne retrouves l'ancien mode d'accès qu'en passant par "Avancé"

    Pour suivre ton tutorial si il s'agit d'un asmx tu peux suivre la procédure avec Web Reference, pour t'y retrouver dans le code.
    Tu pourras ensuite si tu le souhaites faire la même opération avec un client WCF.
    De façon plus général, si tu devais créer un nouveau webservice mieux vaudrait créer le service web et son client via WCF.

    Pour gérer ton problème d'autorisation via web reference tu peux trouver ici une solution.

    Cordialement
    mercredi 10 mars 2010 10:14
    Modérateur
  • Bonjour,

    Et merci pour ta réponse.

    Quel est , entre le Web Référence et le Service Reference, la meilleur façon de procéder?
    Quel est la différence, en plus de l'utilitaire de génération de proxy?
    Je ne suis que débutant dans les web services, et encore je n'ai pas besoin de les créer, pas encore .....

    Je viens de lire cette documentation sur les fichier asmx :
    http://msdn.microsoft.com/fr-fr/library/0c515353%28VS.80%29.aspx

    Et j'ai tenté quelque chose, j'ai tenté de pointer directement via un navigateur sur le fichier .asmx correspondant au webservices que j'essaye d'interroger :
    http://serveur_name/open/services/AbsenceFileService.asmx
    En faisant cela le navigateur me demande une authentification. J'ai tout d'abord essayé en laissant les champs vide. J'obtiens alors une page d'erreur Apache Tomcat / 6.0.16 :
    Etat HTTP 401 - Authentification incorrecte

    Je me suis dis c'est normal je ne lui ai pas indiqué d'id / mdp

    J'ai donc réessayé mais cette fois en indiquant les même id / mdp que j'utilise lors de l'ajout de référence Web. J'accède alors à la page d'aide de la méthode du service. Cependant quand j'essaye d'accèder au différent Wsdl il me ramène automatiquement sur la page d'aide de la méthode du service.

    Alors que quand j'accède à : http://serveur_name/open/services/
    J'ai accès au différente information et au WSDL sans avoir à indiqué d'id / mdp

    Je n'arrive pas a cerner qu'elle est l'authentification qui pose un soucis.

    Est-ce que le fait que les WebServices soit sur un serveur Apache Tomcat nécessite un traitement supplémentaire afin de pouvoir y accèder?

    Je continue mes recherches

    Merci d'avance pour votre aide

    ++



    mercredi 10 mars 2010 14:15
  • Bonjour,

    Bon j'ai trouvé comment interroger mes webservices :

    La modification du fichier de configuration pour l'authentification au webServices n'était pas pris en compte. La j'ai essaye avec les anciens id / mdp.

    Ensuite à l'ajout de la référence je n'ai pas saisit d'id / mdp

    enfin j'ai utilisé se code vb.net :
    Public Sub WebServices(ByVal datedebut As Date, ByVal datefin As Date)
    
            Dim ObjWS As com.evobus.ligny.keliotest.AbsenceFileService = New com.evobus.ligny.keliotest.AbsenceFileService
            Dim cache As CredentialCache = New CredentialCache
            Dim response() As com.evobus.ligny.keliotest.AbsenceFile
    
            Try
                'cache.Add(New Uri(ObjWS.Url), "Negociate", New NetworkCredential("", "", ""))
                cache.Add(New Uri(ObjWS.Url), "Basic", New NetworkCredential("mon_id", "mon_mdp", ""))
                ObjWS.Credentials = cache
                response = ObjWS.exportAbsenceFilesLimitedToAPeriod("", "", datedebut, datefin)
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
        End Sub
    voil
    jeudi 11 mars 2010 12:24
  • Bonjour,

    Raynor et Nikho, merci pour partager votre solution et vos informations.

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    jeudi 11 mars 2010 12:54