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

ASP.NET Discussion :

Acces aux WebServices d'un autre site web.


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 166
    Par défaut Acces aux WebServices d'un autre site web.
    Bonjour à tous,
    J'ai créé une site (siteA) avec ses web services (wcf). Un autre site (siteB) que j'ai créé avec ses propres web services doit pouvoir accéder à ceux du siteA.
    J'ai tenté de créer dans SiteB les acces au ws du siteA, via "ajouter une référence de service..." mais une fois choisi le service dans "Services web sur ordinateur local" le systeme me retourne erreur 404 et donc impossible de créer les fichiers .discomap etc...
    Après quelques recherche, il semble qu'il faille modifier un xml de config dans /Windows/system32/inetsrv/Config/applicationHost.config (//system.webserver/security/hiddensegments/add.@segment=App_WebReferences). Il faudrait deleter cette balise du fichier...
    Mais pour moi, cela ne semble pas fonctionner.
    Y a t il une autre façon de faire via le web.config du siteB ou A ?
    Ou bien dois-je attaquer les ws du siteA directement par url et une webrequest ?
    Merci
    Patrick

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par patrickvier Voir le message
    Après quelques recherche, il semble qu'il faille modifier un xml de config dans /Windows/system32/inetsrv/Config/applicationHost.config (//system.webserver/security/hiddensegments/add.@segment=App_WebReferences). Il faudrait deleter cette balise du fichier...
    Mais pour moi, cela ne semble pas fonctionner.
    Tous tes web services doivent etre heberges, soit par IIS soit au sein d'un service Windows par exemple. S'ils ne sont pas heberges tu ne peux tout simplement pas les utiliser.

    Je pense que l'option "Services web sur ordinateur local" ne fonctionne que si tu as le fichier WSDL disponible. Mais bon, derriere meme si tu pourras ajouter ta reference de service, tu ne pourras utiliser le service que s'il est heberge.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 166
    Par défaut
    Bonsoir,
    Oui, ils sont hébergés dans IIS, enfin, je suppose. Je les ai créé avec VS 2012 en tant qu'Admin, donc dans IIS et non pas dans IIS express.
    Ci-dessous j'ai créé ces 2 sites, le sitte A :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Imports System.ServiceModel
     
    <ServiceContract()>
    Public Interface IServiceA
        <OperationContract()>
        Function Test1(ByVal Arg1 As String, Arg2 As String) As String
    End Interface
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Class ServiceA
        Implements IServiceA
        Public Function Test1(ByVal Arg1 As String, Arg2 As String) As String Implements IServiceA.Test1
            Return Arg1 & " - " & Arg2
        End Function
    End Class
    La structure du site B :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Imports System.ServiceModel
     
    <ServiceContract()>
    Public Interface IServiceB
        <OperationContract()>
        Function TestSiteB(ByVal Arg1 As String, Arg2 As String) As String
    End Interface
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Class ServiceB
        Implements IServiceB
        Public Function TestSiteB(ByVal Arg1 As String, Arg2 As String) As String Implements IServiceB.TestSiteB
            ' Ici je souhaite accéder au WS du SiteA et lui envoyer les 2 arguments... ?
            ' ???
            ' qlq chose comme :
            Dim responseA As String = le retour du webservice du siteA
            Return "Retour du site A = " & responseA
        End Function
    End Class
    Chacun des 2 sites a ses propres WS (.discomap, etc...)... donc tout est ok pour chacun de ces sites.
    En revanche, je tente d'ajouter dans SiteB, les ws du SiteA.
    Voila comment je fais cela dans VS :
    1) click droit sur la recine du site (explorateur de solution) et select Ajouter une référence de service.
    2) Une fenetre s'ouvre et directement en bas à gauche le bouton Avancé...
    3) une nouvelle fenetre s'ouvre et directement le bouton en bas à gauche "Ajouter une reference Web...
    4) une nouvelle fenetre s'ouvre et me propose :
    Utilisez cette page comme point de départ pour rechercher des services Web. Vous pouvez cliquer sur les liens ci-dessous ou taper une URL connue dans la barre d'adresses.
    Rechercher dans :
    Services Web dans cette solution
    Services Web sur l'ordinateur local
    Je choisi Service web sur l'ordinateur local
    Je selectionne le ServiceA (http://localhost/SiteA/App_WebRefere.../ServiceA.wsdl)
    Puis là, c'est le drame...
    Erreur HTTP 404.0 - Not Found
    La ressource que vous recherchez a été supprimée, a été renommée ou est provisoirement indisponible.Causes les plus probables :
    Le répertoire ou fichier spécifié n'existe pas sur le serveur Web.
    L'URL contient une erreur typographique.
    Un filtre ou un module personnalisé, tel que URLScan, limite l'accès au fichier.
    Choses que vous pouvez essayer :
    Créez le contenu du serveur Web.
    Vérifiez l'adresse URL du navigateur.
    Créez une règle de suivi pour effectuer le suivi des demandes ayant échoué pour ce code d'état HTTP et vérifiez quel module s'intitule SetStatus. Pour plus d'informations sur la création d'une règle de suivi pour des demandes ayant échoué, cliquez ici.
    Informations supplémentaires sur l'erreur :
    Module IIS Web Core
    Notification Inconnu
    Gestionnaire StaticFile
    Code d'erreur 0x80070002
    URL demandée http://localhost:80/SiteA/App_WebRef.../ServiceA.wsdl
    Chemin d'accès physique C:\inetpub\wwwroot\SiteA\App_WebReferences\WsSiteA\ServiceA.wsdl
    Méthode d'ouverture de session Pas encore déterminé
    Session utilisateur Pas encore déterminé
    Les fichiers .wsdl existent bien (dans le siteA), mais pas accessibles.

    Faut-il faire un repertoire virtuel qui pointe sur le site A ?

    Au pire, si cela est trop compliqué, quel est le moyen d'executer une requete web avec ses arguements :
    Ci-dessous le code pouvant intérroger une service web, mais comment doit etre structurer la "ressource" avec ses arguments ??
    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
        Private Function Tools_Get(ByVal Ressource As String) As String
     
            Try
                ' Création de la request
                Dim WRequest As WebRequest = WebRequest.Create(Ressource)
                ' Get the response.
                Dim Response As WebResponse = WRequest.GetResponse()
                ' Get the stream containing content returned by the server.
                Dim ResponseDataStream As Stream = Response.GetResponseStream()
                ' Open the stream using a StreamReader for easy access.
                Dim Reader As New StreamReader(ResponseDataStream)
                ' Read the content + get xml response data
                Dim ResponseFromServer As XElement = XElement.Parse(Reader.ReadToEnd())
                ' Clean up the streams and the response.
                Reader.Close()
                Response.Close()
                Return ResponseFromServer.ToString
            Catch ex As Exception
                Return "ERROR>" & ":" & ex.Message
            End Try
        End Function
    Donc, là je suis bloqué par rapport à ce que je souhaite réaliser...

    Une idée ?

    Patrick

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2012
    Messages : 166
    Par défaut
    Bonjour,
    Après qlq recherches, j'ai updaté mon code.
    Le but, maintenant est de pouvoir accéder aux WS via un browser (REST like).
    Je dois aussi modifier mon Web.Config, mais là c'est un peu flou...
    En mode Admin, j'ai ouvert VS pour le Web (2012) et ai créé un site vide from scratch (donc directement dans le IIS, pas le iis express)
    Ci-dessous le code coté serveur.

    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
    Imports System.ServiceModel
    Imports System.Web
     
    Namespace TestComWeb
        <ServiceContract()>
        Public Interface IHttpService
     
            <OperationContract()>
            Function Get_Test1() As String
     
            <OperationContract>
            <Web.WebInvoke(Method:="GET", ResponseFormat:=Web.WebMessageFormat.Xml, BodyStyle:=Web.WebMessageBodyStyle.Wrapped, UriTemplate:="Get_Test2/{0}")>
            Function Get_Test2(ByVal val As String) As String
     
        End Interface
     
    End Namespace
    Le code (behind) du service :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Class HttpService
        Implements TestComWeb.IHttpService
     
        Public Function Get_Test1() As String Implements TestComWeb.IHttpService.Get_Test1
            Return "Retour = Get_Test1 = aucun argument"
        End Function
     
        Public Function Get_Test2(ByVal val As String) As String Implements TestComWeb.IHttpService.Get_Test2
            Return "la version fonctionne avec la valeur retournée : " & val
        End Function
    End Class
    Là, mon Web config :
    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
    <configuration>
        <system.web>
          <compilation debug="true" strict="false" explicit="true" targetFramework="4.5" />
          <httpRuntime targetFramework="4.5" />
        </system.web>
        <system.serviceModel>
          <services>
     
            <service name="TestComWeb.HttpService" behaviorConfiguration="">
              <endpoint address="" binding="webHttpBinding" behaviorConfiguration="web" contract="TestComWeb.IHttpService">
              </endpoint>
            </service>
     
          </services>
            <behaviors>
                <serviceBehaviors>
                    <behavior name="">
                        <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
                        <serviceDebug includeExceptionDetailInFaults="false" />
                    </behavior>
                </serviceBehaviors>
     
              <endpointBehaviors>
                <behavior name="web">
                  <webHttp/>
                </behavior>
              </endpointBehaviors>
     
            </behaviors>
            <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
                multipleSiteBindingsEnabled="true" />
        </system.serviceModel>
    </configuration>
    Dans le browser :
    l'adresse : http://localhost/TestComServeur/HttpService.svc
    fonctionne, il me retourne bien ce qui est attendu
    en revanche, je tente d'obtenir une réponse via l'adresse (http://localhost/TestComServeur/Http...c/Get_Test2/12), mais bien évidement, cela ne fonctionne pas.
    Je pense que cela est dans le web.config, mais où et quoi ?
    Merci de pouvoir vous pencher sur cela.
    Patrick

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/07/2007, 09h11
  2. Accés aux objets d'un autre utilisateur
    Par ariesnojf dans le forum Oracle
    Réponses: 2
    Dernier message: 02/02/2007, 18h30
  3. Acces aux composants d'une autre class
    Par Yann39 dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 13/01/2007, 22h16
  4. Page d'accés aux données Access sur un site web
    Par kilimanjaro dans le forum Access
    Réponses: 3
    Dernier message: 29/01/2006, 19h31
  5. hote virtuel pour autre site web
    Par vedder dans le forum Apache
    Réponses: 8
    Dernier message: 27/07/2004, 14h25

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