Freigeben über


Statusverwaltung in mit ASP.NET erstellten XML-Webdiensten

XML-Webdienste erhalten Zugriff auf dieselben Statusverwaltungsoptionen wie andere ASP.NET-Anwendungen, wenn die Klasse zur Implementierung des XML-Webdienstes von der WebService-Klasse abgeleitet wurde. Die WebService-Klasse enthält viele der allgemeinen ASP.NET-Objekte, darunter die Objekte Session und Application.

Das Application-Objekt bietet einen Mechanismus für das Speichern von Daten, auf die sämtlicher, in der Webanwendung ausgeführter Code zugreifen kann. Demgegenüber ermöglicht das Session-Objekt das Speichern von Daten pro Clientsitzung. Wenn der Client Cookies unterstützt, kann die Clientsitzung durch ein Cookie identifiziert werden. Die im Session-Objekt gespeicherten Daten sind nur verfügbar, wenn die EnableSession-Eigenschaft des WebMethod-Attributs für eine von WebService abgeleitete Klasse auf true gesetzt ist. Eine von WebService abgeleitete Klasse hat automatisch Zugriff auf das Application-Objekt.

So greifen Sie auf den für eine bestimmte Clientsitzung spezifischen Status zu und speichern diesen

  1. Deklarieren Sie einen XML-Webdienst.

    <%@ WebService Language="C#" Class="ServerUsage" %>
    [Visual Basic]
    <%@ WebService Language="VB" Class="ServerUsage" %>
    
  2. Fügen Sie einen Verweis auf den System.Web.Services-Namespace hinzu.

    using System.Web.Services;
    [Visual Basic]
    Imports System.Web.Services
    
  3. Leiten Sie die Klasse, durch die der XML-Webdienst implementiert wird, von WebService ab.

    public class ServerUsage : WebService 
    [Visual Basic]
    Public Class ServerUsage : Inherits WebService
    
  4. Deklarieren Sie eine XML-Webdienstmethode, und legen Sie dabei die EnableSession-Eigenschaft des WebMethod-Attributs auf true fest.

    [ WebMethod(EnableSession=true) ]
    public int PerSessionServiceUsage()
    [Visual Basic]
    < WebMethod(EnableSession:=True) > _
    Public Function PerSessionServiceUsage() As Integer
    
  5. Speichern Sie den Status in Session, und legen Sie dabei zum späteren Abruf einen Namen für den Status fest. Im folgenden Beispiel wird der Wert 1 in einer Statusvariablen namens MyServiceUsage gespeichert.

    Session["MyServiceUsage"] = 1;
    [Visual Basic]
    Session("MyServiceUsage") = 1
    
  6. Greifen Sie auf die in Session gespeicherte Statusvariable zu.

    Im folgenden Beispiel wird durch den Zugriff der Wert der MyServiceUsage-Statusvariablen erhöht.

    Session["MyServiceUsage"] = ((int) Session["MyServiceUsage"]) + 1;
    [Visual Basic]
    Session("MyServiceUsage") = CInt(Session("MyServiceUsage")) + 1
    

So greifen Sie auf den für die Webanwendung, die den XML-Webdienst enthält, spezifischen Status zu und speichern diesen

  1. Deklarieren Sie einen XML-Webdienst.

    <%@ WebService Language="C#" Class="ServerUsage" %>
    [Visual Basic]
    <%@ WebService Language="VB" Class="ServerUsage" %>
    
  2. Fügen Sie einen Verweis auf den System.Web.Services-Namespace hinzu.

    using System.Web.Services;
    [Visual Basic]
    Imports System.Web.Services
    
  3. Leiten Sie die Klasse, durch die der XML-Webdienst implementiert wird, von WebService ab.

    public class ServerUsage : WebService
    [Visual Basic]
    Public Class ServerUsage : Inherits WebService
    
  4. Deklarieren Sie eine XML-Webdienstmethode.

    [ WebMethod ]
    public int PerSessionServiceUsage()
    [Visual Basic]
    < WebMethod > _
    Public Function PerSessionServiceUsage() As Integer
    
  5. Speichern Sie den Status in Application, und legen Sie dabei zum späteren Abruf einen Namen für den Status fest. Im folgenden Beispiel wird der Wert 1 in einer Statusvariablen namens appMyServiceUsage gespeichert.

    Application["appMyServiceUsage"] = 1;
    [Visual Basic]
    Application("appMyServiceUsage") = 1
    
  6. Greifen Sie auf die in Application gespeicherte Statusvariable zu.

    Im folgenden Beispiel wird durch den Zugriff der Wert der appMyServiceUsage-Statusvariablen erhöht.

    Application["appMyServiceUsage"] =
       ((int) Application["appMyServiceUsage"]) + 1;
    [Visual Basic]
    Application("appMyServiceUsage") = _
       CInt(Application("appMyServiceUsage")) + 1
    

Das folgende Codebeispiel ist ein XML-Webdienst mit zwei XML-Webdienstmethoden: ServerUsage und PerSessionServerUsage. ServerUsage ist ein Zugriffszähler, der bei jedem Zugriff auf die XML-Webdienstmethode ServerUsage erhöht wird, und zwar unabhängig von dem Client, der mit der XML-Webdienstmethode kommuniziert. Wenn beispielsweise drei Clients die XML-Webdienstmethode ServerUsage nacheinander aufrufen, erhält die letzte den Rückgabewert 3. PerSessionServiceUsage dient demgegenüber als Zugriffszähler für eine bestimmte Clientsitzung. Wenn drei Clients nacheinander auf PerSessionServiceUsage zugreifen, erhält jeder Client beim ersten Aufruf mit 1 dasselbe Ergebnis.

<%@ WebService Language="C#" Class="ServerUsage" %>
using System.Web.Services;

public class ServerUsage : WebService {
   [ WebMethod(Description="Number of times this service has been accessed.") ]
   public int ServiceUsage() {
     // If the XML Web service method hasn't been accessed,
     // initialize it to 1.
     if (Application["appMyServiceUsage"] == null) 
     {
       Application["appMyServiceUsage"] = 1;
     }
     else
     {
     // Increment the usage count.
       Application["appMyServiceUsage"] = ((int) Application["appMyServiceUsage"]) + 1;
     }
     return  (int) Application["appMyServiceUsage"];
   }

   [ WebMethod(Description="Number of times a particualr client session has accessed this XML Web service method.",EnableSession=true) ]
   public int PerSessionServiceUsage() {
     // If the XML Web service method hasn't been accessed, initialize
     // it to 1.
     if (Session["MyServiceUsage"] == null) 
     {
       Session["MyServiceUsage"] = 1;
     }
     else
     {
     // Increment the usage count.
       Session["MyServiceUsage"] = ((int) Session["MyServiceUsage"]) + 1;
     }
     return  (int) Session["MyServiceUsage"];
   }
}
[Visual Basic]
<%@ WebService Language="VB" Class="ServerUsage" %>
Imports System.Web.Services

Public Class ServerUsage
    Inherits WebService
    
<WebMethod(Description := "Number of times this service has been accessed.")> _
    Public Function ServiceUsage() As Integer
        ' If the XML Web service method hasn't been accessed, initialize
        ' it to 1.
        If Application("appMyServiceUsage") Is Nothing Then            Application("appMyServiceUsage") = 1
        Else
            ' Increment the usage count.
            Application("appMyServiceUsage") = _               CInt(Application("appMyServiceUsage")) + 1
        End If
        Return CInt(Application("appMyServiceUsage"))
    End Function    
    
<WebMethod(Description := "Number of times a particular client session has accessed this XML Web service method.", EnableSession := True)> _
    Public Function  PerSessionServiceUsage() As Integer
       ' If the XML Web service method hasn't been accessed,
       ' initialize it to 1.
        If Session("MyServiceUsage") Is Nothing Then            Session("MyServiceUsage") = 1
        Else
            ' Increment the usage count.
           Session("MyServiceUsage") = CInt(Session("MyServiceUsage")) + 1
        End If
        Return CInt(Session("MyServiceUsage"))
    End Function
    
End Class

Siehe auch

ASP.NET-Zustandsverwaltung | Erstellen von XML-Webdiensten mit ASP.NET