Freigeben über


Exemplarische Vorgehensweise: Erstellen und Verwenden eines AJAX-fähigen Webdiensts

Aktualisiert: November 2007

Mit Visual Studio 2008 und Microsoft Visual Web Developer Express Edition können Sie benutzerdefinierte ASP.NET-Webdienste (ASMX-Dateien) erstellen, die mittels Clientskript aufgerufen werden können. In dieser exemplarischen Vorgehensweise erstellen Sie einen AJAX-fähigen Webdienst und rufen die zugehörigen Methoden mit Clientskript auf.

Wenn Sie ASP.NET-Webdienste erstellen und diese für Clientskript verfügbar machen, werden von ASP.NET automatisch JavaScript-Proxyklassen für die Webdienste erstellt. Sie können eine Webdienstmethode aufrufen, indem Sie die entsprechende Methode der JavaScript-Proxyklasse aufrufen.

In dieser exemplarischen Vorgehensweise wird Folgendes gezeigt:

  • Erstellen eines AJAX-fähigen Webdiensts in Visual Studio 2008 oder Microsoft Visual Web Developer Express Edition.

Vorbereitungsmaßnahmen

Für die Durchführung dieser exemplarischen Vorgehensweise benötigen Sie Folgendes:

  • Visual Studio 2008 oder Microsoft Visual Web Developer Express Edition.

  • Auf dem Computer lokal installierte Microsoft Internetinformationsdienste (IIS).

Erstellen eines AJAX-fähigen Webdiensts

In diesem Abschnitt wird beschrieben, wie ein AJAX-fähiger Webdienst erstellt wird.

Hinweis:

Sie müssen für diese exemplarische Vorgehensweise eine IIS-Website verwenden.

So erstellen Sie einen AJAX-fähigen Webdienst

  1. Öffnen Sie Visual Studio 2008 oder Microsoft Visual Web Developer Express Edition.

  2. Klicken Sie im Menü Datei auf Neue Website.

    Das Dialogfeld Neue Website wird angezeigt.

  3. Klicken Sie unter Von Visual Studio installierte Vorlagen auf ASP.NET-Website.

  4. Klicken Sie auf Durchsuchen.

  5. Klicken Sie auf Lokale IIS.

  6. Klicken Sie auf Standardwebsite.

  7. Klicken Sie in der oberen rechten Ecke auf das Symbol Neue Webanwendung erstellen.

    Visual Studio erstellt eine neue IIS-Webanwendung.

  8. Geben Sie den Namen HelloWorldService an.

    Hinweis:

    Der Name der Website, die Sie erstellen, ist nicht relevant.

  9. Klicken Sie auf Öffnen.

    Das Dialogfeld Neue Website wird angezeigt. Darin befindet sich der Name der neuen Website ganz rechts in der Liste Speicherort. Der Speicherort schließt das Protokoll (http://) und den Speicherort (localhost) ein. Damit wird angegeben, dass Sie mit einer lokalen IIS-Website arbeiten.

  10. Wählen Sie in der Liste Sprache die Programmiersprache aus, in der Sie arbeiten möchten.

  11. Klicken Sie auf OK.

Schreiben des benutzerdefinierten Webdiensts

In diesem Abschnitt wird beschrieben, wie ein AJAX-fähiger Webdienst mit einer Methode geschrieben wird, die die Zeichenfolge "Hello World" sowie die aktuelle Serverzeit zurückgibt.

So schreiben Sie den benutzerdefinierten Webdienst

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Namen der Website (https://localhost/HelloWorldService), und klicken Sie dann auf Neues Element hinzufügen.

  2. Klicken Sie unter Von Visual Studio installierte Vorlagen auf Webdienst, und geben Sie dann im Feld Name die Zeichenfolge HelloWorld.asmx ein.

  3. Stellen Sie sicher, dass das Kontrollkästchen Code in eigener Datei platzieren aktiviert ist, und klicken Sie dann auf Hinzufügen.

    Visual Studio 2008 erstellt einen neuen Webdienst, der aus zwei Dateien besteht. HelloWorld.asmx ist die Datei, die zum Aufrufen von Webdienstmethoden ausgeführt werden kann. Sie verweist auf den Webdienstcode. Der Code selbst befindet sich in einer Klassendatei (je nach Programmiersprache HelloWorld.vb oder HelloWorld.cs) im Ordner App_Code. Die Codedatei enthält eine Vorlage für einen Webdienst.

  4. Löschen Sie den vorhandenen Code in der Klasse, und ersetzen Sie ihn durch den folgenden Code:

    Imports System
    Imports System.Web
    Imports System.Collections
    Imports System.Web.Services
    Imports System.Web.Services.Protocols
    
    Namespace Samples.Aspnet
        <WebService([Namespace]:="http://mycompany.org/"), _
        WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1), _
        System.Web.Script.Services.ScriptService()> _
        Public Class HelloWorld
            Inherits System.Web.Services.WebService
    
            Public Sub New()
    
            End Sub 'New
    
    
            'Uncomment the following line if using designed components 
            'InitializeComponent(); 
    
            <WebMethod()> _
            Public Function Greetings() As String
                Dim serverTime As String = _
                    String.Format("Current date and time: {0}.", DateTime.Now)
                Dim greet As String = "Hello World. <br/>" + serverTime
                Return greet
    
            End Function 'Greetings
        End Class 'HelloWorld
    
    End Namespace
    
    using System;
    using System.Web;
    using System.Collections;
    using System.Web.Services;
    using System.Web.Services.Protocols;
    
    namespace Samples.Aspnet
    {
        [WebService(Namespace="http://mycompany.org")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        // The following attribute allows the service to 
        // be called from script using ASP.NET AJAX.
        [System.Web.Script.Services.ScriptService]
        public class HelloWorld : System.Web.Services.WebService
        {
    
            public HelloWorld()
            {
    
                //Uncomment the following line if using designed components 
                //InitializeComponent(); 
            }
    
            [WebMethod]
            public string Greetings()
            {
                string serverTime =
                    String.Format("Current date and time: {0}.", DateTime.Now);
                string greetings = "Hello World! <br/>" + serverTime;
                return greetings;
            }
    
        }
    }
    

    Beachten Sie, dass vor den Funktionsnamen das WebMethodAttribute-Attribut als Teil der Funktionsdeklaration steht. Außerdem wird die HelloWorld-Klasse mit dem ScriptServiceAttribute-Attribut qualifiziert.

    Aufgrund dieser Attribute kann der Webdienst von Skript in AJAX-fähigen ASP.NET-Webseiten aufgerufen werden.

  5. Speichern und schließen Sie die Datei.

  6. Öffnen Sie die Datei HelloWorld.asmx, und fügen Sie die folgende Direktive hinzu:

    <%@ WebService Language="VB" CodeBehind="~/App_Code/HelloWorld.vb" Class="Samples.Aspnet.HelloWorld" %>
    
    <%@ WebService Language="C#" CodeBehind="~/App_Code/HelloWorld.cs" Class="Samples.Aspnet.HelloWorld" %>
    
  7. Speichern und schließen Sie die Datei.

Jetzt können Sie den Webdienst in Ihrem Browser testen. In diesem Test wird kein Skript zum Aufrufen der Webdienstmethoden verwendet. Es wird lediglich überprüft, ob der Webdienst ordnungsgemäß funktioniert.

So testen Sie den Webdienst

  1. Öffnen Sie den Browser, und geben Sie folgende URL ein: https://localhost/HelloWorldService/HelloWorld.asmx

    Der Webdienst wird aufgerufen, und es wird im Browser eine Seite angezeigt, auf der die vom Webdienst verfügbar gemachten Methoden dargestellt werden.

  2. Klicken Sie auf Greetings. Eine Seite mit der Schaltfläche Invoke wird angezeigt.

  3. Klicken Sie auf die Schaltfläche Invoke, um die Methode aufzurufen und den zurückgegebenen Wert im XML-Format anzuzeigen.

  4. Schließen Sie den Browser.

Sie haben den AJAX-fähigen Webdienst erstellt.

Verwenden des Webdiensts

Im nächsten Schritt wird der Webdienst über ein Clientskript aufgerufen.

So rufen Sie den Webdienst über ein Clientskript auf

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Namen der Website (https://localhost/HelloWorldService), und klicken Sie dann auf Neues Element hinzufügen.

  2. Klicken Sie unter Von Visual Studio installierte Vorlagen auf JScript-Datei, und geben Sie dann im Feld Name die Zeichenfolge HelloWorld.js ein.

  3. Klicken Sie auf OK.

  4. Fügen Sie der Skriptdatei folgenden Code hinzu:

    var helloWorldProxy;
    
    // Initializes global and proxy default variables.
    function pageLoad()
    {
        // Instantiate the service proxy.
        helloWorldProxy = new Samples.Aspnet.HelloWorld();
    
        // Set the default call back functions.
        helloWorldProxy.set_defaultSucceededCallback(SucceededCallback);
        helloWorldProxy.set_defaultFailedCallback(FailedCallback);
    }
    
    
    // Processes the button click and calls
    // the service Greetings method.  
    function OnClickGreetings()
    {
        var greetings = helloWorldProxy.Greetings();
    }
    
    // Callback function that
    // processes the service return value.
    function SucceededCallback(result)
    {
        var RsltElem = document.getElementById("Results");
        RsltElem.innerHTML = result;
    }
    
    // Callback function invoked when a call to 
    // the  service methods fails.
    function FailedCallback(error, userContext, methodName) 
    {
        if(error !== null) 
        {
            var RsltElem = document.getElementById("Results");
    
            RsltElem.innerHTML = "An error occurred: " + 
                error.get_message();
        }
    }
    
    if (typeof(Sys) !== "undefined") Sys.Application.notifyScriptLoaded();
    

    Dieses Clientskript wird von der Seite Default.aspx verwendet, um die HelloWorld-Dienstmethoden aufzurufen.

  5. Öffnen Sie in Visual Studio 2008 die Seite Default.aspx.

  6. Löschen Sie das vorhandene Markup auf der Seite, und ersetzen Sie es durch den folgenden Code:

    <%@ Page Language="VB" AutoEventWireup="false" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    
        <head id="Head1" >
            <style type="text/css">
                body {  font: 11pt Trebuchet MS;
                        color: #000000;
                        padding-top: 72px;
                        text-align: center }
    
                .text { font: 8pt Trebuchet MS }
            </style>
    
            <title>Using AJAX Enabled ASP.NET Service</title>
    
        </head>
    
        <body>
            <form id="Form1" >
                <asp:ScriptManager  ID="scriptManager">
                    <Services>
                        <asp:ServiceReference path="~/HelloWorld.asmx" />
                    </Services>
                    <Scripts>
                        <asp:ScriptReference Path="~/HelloWorld.js" />
                    </Scripts>
                </asp:ScriptManager>
                <div>
                    <h3>Using AJAX Enabled ASP.NET Service</h3>
    
                    <table>
                        <tr align="left">
                            <td>Click to call the Hello World service:</td>
                            <td>
                                <button id="Button1" 
                                    onclick="OnClickGreetings(); return false;">Greetings</button>
                            </td>
                        </tr>
                    </table>
                </div>
            </form>
    
            <hr/>
    
            <div>
                <span id="Results"></span>
            </div>   
    
        </body>
    
    </html>
    
    <%@ Page Language="C#" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    
        <head id="Head1" >
            <style type="text/css">
                body {  font: 11pt Trebuchet MS;
                        color: #000000;
                        padding-top: 72px;
                        text-align: center }
    
                .text { font: 8pt Trebuchet MS }
            </style>
    
            <title>Using AJAX Enabled ASP.NET Service</title>
    
        </head>
    
        <body>
            <form id="Form1" >
                <asp:ScriptManager  ID="scriptManager">
                    <Services>
                        <asp:ServiceReference path="~/HelloWorld.asmx" />
                    </Services>
                    <Scripts>
                        <asp:ScriptReference Path="~/HelloWorld.js" />
                    </Scripts>
                </asp:ScriptManager>
                <div>
                    <h3>Using AJAX Enabled ASP.NET Service</h3>
    
                    <table>
                        <tr align="left">
                            <td>Click to call the Hello World service:</td>
                            <td>
                                <button id="Button1" 
                                    onclick="OnClickGreetings(); return false;">Greetings</button>
                            </td>
                        </tr>
                    </table>
                </div>
            </form>
    
            <hr/>
    
            <div>
                <span id="Results"></span>
            </div>   
    
        </body>
    
    </html>
    

    Die Seite enthält ein ScriptManager-Steuerelement. Das path-Attribut des ServiceReference-Elements im Abschnitt Services verweist auf den HelloWorld-Dienst, den Sie zuvor erstellt haben. Das path-Attribut des ServiceReference-Elements im Abschnitt Script verweist auf das HelloWorld.js-Skript.

  7. Öffnen Sie den Browser, und geben Sie folgende URL ein:

    http://<localhost>/HelloWorldService/Default.aspx

  8. Klicken Sie auf der angezeigten Seite auf die Schaltfläche Greetings.

    Dadurch wird ein Aufruf an den Webdienst generiert, der eine Grußnachricht sowie die aktuelle Zeit und das Datum des Servers zurückgibt.

Nächste Schritte

In dieser exemplarischen Vorgehensweise wurden die Grundprinzipien für das Erstellen eines Webdiensts und dessen Aufruf auf einer Webseite mittels Clientskript veranschaulicht. Möglicherweise möchten Sie mit weiteren, komplexeren Webdienstfeatures experimentieren. Sie können sich u. a. folgendermaßen weiter mit dem Thema befassen:

Siehe auch

Konzepte

Verfügbarmachen von Webdiensten für Clientskript

Aufrufen von Webdiensten vom Clientskript

Verwenden von Webdiensten in ASP.NET-AJAX