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

Services Web Discussion :

Service web dans un site asp.net


Sujet :

Services Web

  1. #1
    Membre actif Avatar de MicaelFelix
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 254
    Points : 221
    Points
    221
    Par défaut Service web dans un site asp.net
    Bonjour,

    J'ai une petite question de débutant à poser sur les services ASP.Net

    J'utilisais jusqu'à maintenant les services intégrés dans les pages ASP.Net, c'est à dire les PageMethods, qui sont très simples à utiliser directement par Javascript car il n'y a qu'un appel à PageMethods.NomDeLaMethode(fonctionJavascriptResultHandler) à faire pour effectuer la requête.
    Mais voilà, j'aimerai faire la même chose... mais accessible à toutes mes pages.
    Alors bien évidemment j'ai pensé au Service Web qu'on peut créer dans le site.
    C'est ce que j'ai fait.
    Le code est similaire au code utilisé dans mes PageMethods (avec la déclaration <WebMethod()>_ au début) donc pour ça c'est parfait.

    Mon vrai problème c'est que je n'arrive pas à appeler ce service à partir de Javascript simple.

    Peut être un problème de configuration? J'ai simplement rajouté mon service et le path du service dans le scriptmanager :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <asp:ScriptManager ID="sm1" runat="server" EnablePageMethods="true">
                <Services>
                    <asp:ServiceReference Path="~/CommonServices.asmx" />
                </Services>
            </asp:ScriptManager>
    J'ai testé plusieurs méthodes et la dernière qui semble appeler correctement le service ressemble à celle-ci mais ASP.Net me donne une erreur comme quoi le type est incorrect :

    Impossible de créer le type 'SisWebMobile.CommonServices'.<br /><br /><span style="size9">StackTrace : <br /> à System.Web.UI.SimpleWebHandlerParser.GetType(String typeName)<br /> à System.Web.UI.SimpleWebHandlerParser.GetTypeToCache(Assembly builtAssembly)<br /> à System.Web.Compilation.SimpleHandlerBuildProvider.GetGeneratedType(CompilerResults results)<br /> à System.Web.Compilation.BuildProvider.CreateBuildResult(CompilerResults results)<br /> à System.Web.Compilation.BuildProvider.GetBuildResult(CompilerResults results)<br /> à System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath)<br /> à System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)<br /> à System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)<br /> à System.Web.Compilation.BuildManager.GetVPathBuildResult(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)<br /> à System.Web.Compilation.BuildManager.GetVPathBuildResult(HttpContext context, VirtualPath virtualPath)<br /> à System.Web.UI.WebServiceParser.GetCompiledType(String inputFile, HttpContext context)<br /> à System.Web.Services.Protocols.WebServiceHandlerFactory.GetHandler(HttpContext context, String verb, String url, String filePath)
    [...]

    Voici le code du service web :
    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
    Imports System.Web.Services
    Imports System.Web.Services.Protocols
    Imports System.ComponentModel
     
    ' Pour autoriser l'appel de ce service Web depuis un script à l'aide d'ASP.NET AJAX, supprimez les marques de commentaire de la ligne suivante.
    ' <System.Web.Script.Services.ScriptService()> _
    Namespace SISWebMobile
        <System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
        <System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
        <ToolboxItem(False)> _
        Public Class CommonServices
            Inherits System.Web.Services.WebService
     
            <WebMethod()> _
            Public Function HelloWorld() As String
                Return "Hello World"
            End Function
     
            <WebMethod()> _
            Protected Shared Function EmptyCart() As String
                CurrentSession.clearProduits()
                Return "OK" & "Le panier est vide" & "|" & CurrentSession.getPanier.getCount()
            End Function
     
        End Class
    End Namespace
    Et voici le code javascript utilisé (il y a eu plusieurs versions mais celui-ci au moins me donne une erreur qui me revient par Ajax) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <script type="text/javascript">
     
            var OnWSRequestComplete = function(res) {
                if (res.readyState == 4 && res.status == 200) {
                    alert(res);
                }
            }
            req_params = "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body><HelloWorld >";
            req_params = req_params + "</HelloWorld></soap:Body></soap:Envelope>";
            ajaxRequest("./CommonServices.asmx", req_params, OnWSRequestComplete);
        </script>
    J'ai beau chercher sur des sites, la plupart utilisent les Web Services directement à partir du code .Net seulement moi j'ai besoin d'utiliser directement Javascript pour faire ma requête et récupérer le résultat.


    Quelqu'un connaitrait un site qui explique cela?
    Dès que j'arriverai à envoyer la requête au service web et de récupérer le résultat d'un HelloWorld ça fonctionnera à merveille, mais pour l'instant je bloque sur ça alors que ça ne doit pas être si difficile.


    J'ai déjà un workaround si jamais ça marche pas, genre utiliser une page .ASPX simple et évaluer les POST/GET qui lui sont envoyés afin de renvoyer le résultat, mais j'aimerai le faire par la fonction de service web pour avoir un code plus clean qu'une série de "If Request.QueryString("param")=... Then... End If".

    Sur certains sites j'avais vu qu'ils utilisaient genre de code comme ça :
    NomDeProjet.NomDeService.NomDeMethode(...)
    Mais cela n'a pas l'air de fonctionner pour moi.

    Le code qui se rapproche le plus de ce que je veux est donné par :
    http://aspdotnetcodebook.blogspot.co...ice-using.html
    (bien qu'ils utilisent une URL fixe pour l'adresse du service web)


    Merci d'avance pour vos réponses!

    Je continue à chercher mais si vous avez la solution ça m'arrangerai

  2. #2
    Membre actif Avatar de MicaelFelix
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 254
    Points : 221
    Points
    221
    Par défaut
    Trouvé!

    En fait j'avais oublié de supprimer le ' qui mettait en commentaire (code par défaut de VS) ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <System.Web.Script.Services.ScriptService()> _
    Puis, comme mon projet est un Site ASP.Net avant d'être un service Web et pour des raisons de sécurité, il faut rajouter dans le Web.Config les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <webServices>
        <protocols>
            <add name="HttpGet"/>
            <add name="HttpPost"/>
        </protocols>
    </webServices>
    Avec cela, plus aucune erreur, et dans Firefox je vois correctement le retour de la requête que j'ai fait à mon webservice.

    J'ai trouvé ma solution en partie grâce à : http://articles.techrepublic.com.com/5100-10878_11-1050036.html et http://forums.asp.net/t/988377.aspx

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

Discussions similaires

  1. Implantation d'AlloPass dans un site ASP.NET
    Par zooffy dans le forum ASP.NET
    Réponses: 16
    Dernier message: 19/10/2011, 07h33
  2. Consommer un service web Java en C#-ASP.NET
    Par azerty_123 dans le forum Services Web
    Réponses: 3
    Dernier message: 01/07/2009, 16h45
  3. Remplacer des controles ajax dans un site ASP .net par des codes javascript
    Par Contact2012 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 15/09/2008, 13h50
  4. Réponses: 2
    Dernier message: 06/12/2007, 14h03
  5. Utiliser un service web dans une page ASP
    Par REMACC1 dans le forum ASP
    Réponses: 2
    Dernier message: 30/08/2006, 10h17

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