Gewusst wie: Verwenden des WebMethod-Attributs

Aktualisiert: November 2007

Wenn Sie das WebMethod-Attribut an eine Public-Methode anfügen, bedeutet dies, dass die Methode als Teil des XML-Webdiensts verfügbar gemacht werden soll. Sie können die Eigenschaften dieses Attributs auch verwenden, um das Verhalten der XML-Webdienstmethode weiter zu konfigurieren. Weitere Informationen finden Sie unter Codemodell für XML-Webdienste in verwaltetem Code.

Das WebMethod-Attribut bietet folgende Eigenschaften:

  • BufferResponse

  • CacheDuration

  • Beschreibung

  • EnableSession

  • MessageName

  • TransactionOption

BufferResponse

Die BufferResponse-Eigenschaft des WebMethod-Attributs aktiviert die Pufferung von Antworten für eine XML-Webdienstmethode. Wenn für diese die Standardeinstellung True festgelegt wurde, puffert ASP.NET die gesamte Antwort, bevor sie zum Client gesendet wird. Die Pufferung ist sehr effizient und hilft bei der Optimierung der Leistung, indem die Kommunikation zwischen dem Workerprozess und dem IIS-Prozess minimiert wird. Wenn für sie False festgelegt ist, puffert ASP.NET die Antwort in Blöcken mit 16 KB. In der Regel würden Sie für diese Eigenschaft nur dann False festlegen, wenn nicht der gesamte Inhalt der Antwort auf einmal in den Arbeitsspeicher geladen werden soll. Dies ist z. B. der Fall, wenn Sie eine Auflistung zurückschreiben, die ihre Elemente aus einer Datenbank abruft. Wenn nichts anderes angegeben wurde, ist der Standardwert True. Weitere Informationen finden Sie unter WebMethodAttribute.BufferResponse-Eigenschaft.

So puffern Sie die Antwort auf eine XML-Webdienstmethode

  • Verwenden Sie die BufferResponse-Eigenschaft des WebMethod-Attributs wie im Folgenden gezeigt:

    Public Class Service1
        Inherits System.Web.Services.WebService
        <System.Web.Services.WebMethod(BufferResponse:=False)> _
        Public Function GetBigData() As DataSet
            'implementation code
        End Function
    End Class
    
    public class Service1 : System.Web.Services.WebService
    { 
        [System.Web.Services.WebMethod(BufferResponse=false)]
        public DataSet GetBigData()
        {
           //implementation code
        }
    }
    

CacheDuration

Die CacheDuration-Eigenschaft des WebMethod-Attributs aktiviert das Zwischenspeichern der Ergebnisse für eine XML-Webdienstmethode. Die Ergebnisse für jede eindeutige Parametermenge werden von ASP.NET zwischengespeichert. Der Wert dieser Eigenschaft gibt die Anzahl der Sekunden an, für die die Ergebnisse von ASP.NET zwischengespeichert werden. Mit dem Wert 0 wird die Zwischenspeicherung von Ergebnissen deaktiviert. Wenn nichts anderes angegeben wurde, ist der Standardwert 0. Weitere Informationen finden Sie unter WebMethodAttribute.CacheDuration-Eigenschaft.

So aktivieren Sie das Zwischenspeichern der Ergebnisse einer XML-Webdienstmethode

  • Verwenden Sie die CacheDuration-Eigenschaft des WebMethod-Attributs wie im Folgenden gezeigt:

    Public Class Service1
        Inherits System.Web.Services.WebService
        <System.Web.Services.WebMethod(CacheDuration:=60)> _
        Public Function ConvertTemperature(ByVal dFahrenheit As Double) _
                                           As Double
            ConvertTemperature = ((dFahrenheit - 32) * 5) / 9
        End Function
    End Class
    
    public class Service1 : System.Web.Services.WebService
    { 
        [System.Web.Services.WebMethod(CacheDuration=60)]
        public double ConvertTemperature(double dFahrenheit)
        {
           return ((dFahrenheit - 32) * 5) / 9;
        }
    }
    

Beschreibung

Die Description-Eigenschaft des WebMethod-Attributs stellt eine Beschreibung für eine XML-Webdienstmethode bereit, die auf der Diensthilfeseite angezeigt wird. Wenn nichts anderes angegeben wurde, ist der Standardwert eine leere Zeichenfolge. Weitere Informationen finden Sie unter WebMethodAttribute.Description-Eigenschaft.

So stellen Sie eine Beschreibung für eine XML-Webdienstmethode bereit

  • Verwenden Sie die Description-Eigenschaft des WebMethod-Attributs wie im Folgenden gezeigt:

    Public Class Service1
        Inherits System.Web.Services.WebService
        <System.Web.Services.WebMethod( _
           Description:="This method converts a temperature " & _
           "in degrees Fahrenheit to a temperature in degrees Celsius.")> _
        Public Function ConvertTemperature(ByVal dFahrenheit As Double) _
                                           As Double
            ConvertTemperature = ((dFahrenheit - 32) * 5) / 9
        End Function
    End Class
    
    public class Service1 : System.Web.Services.WebService
    { 
        [System.Web.Services.WebMethod(
           Description="Converts F to C a temperature in " +
           "degrees Fahrenheit to a temperature in degrees Celsius.")]
        public double ConvertTemperature(double dFahrenheit)
        {
           return ((dFahrenheit - 32) * 5) / 9;
        }
    }
    

EnableSession

Die EnableSession-Eigenschaft des WebMethod-Attributs aktiviert den Sitzungszustand für eine XML-Webdienstmethode. Nach der Aktivierung kann der XML-Webdienst direkt aus HttpContext.Current.Session oder über die WebService.Session-Eigenschaft – sofern diese von der WebService-Basisklasse erbt – auf die Auflistung für den Sitzungszustand zugreifen. Wenn nichts anderes angegeben wurde, ist der Standardwert False. Weitere Informationen finden Sie unter WebMethodAttribute.EnableSession-Eigenschaft.

So aktivieren Sie den Sitzungszustand in einer XML-Webdienstmethode

  • Verwenden Sie die EnableSession-Eigenschaft des WebMethod-Attributs wie im Folgenden gezeigt:

    Public Class Service1
        Inherits System.Web.Services.WebService
        <System.Web.Services.WebMethod(EnableSession:=True)> _
        Public Function ConvertTemperature(ByVal dFahrenheit As Double) _
                                           As Double
            Session("Conversions") = Session("Conversions") + 1
            ConvertTemperature = ((dFahrenheit - 32) * 5) / 9
        End Function
        <System.Web.Services.WebMethod(EnableSession:=True)> _
        Public Function GetNumberOfConversions() As Integer
            GetNumberOfConversions = Session("Conversions")
        End Function
    End Class
    
    public class Service1 : System.Web.Services.WebService
    { 
        [System.Web.Services.WebMethod(EnableSession=true)]
        public double ConvertTemperature(double dFahrenheit)
        {
           Session["Conversions"] = (int) Session["Conversions"] + 1;
           return ((dFahrenheit - 32) * 5) / 9;
        }
        [System.Web.Services.WebMethod(EnableSession=true)]
        public int GetNumberOfConversions()
        {
           return (int) Session["Conversions"];
        }
    }
    

MessageName

Die MessageName-Eigenschaft des WebMethod-Attributs aktiviert den XML-Webdienst so, dass überladene Methoden mit einem Alias eindeutig gekennzeichnet werden. Wenn nichts anderes angegeben wurde, ist der Standardwert der Methodenname. Bei Angabe von MessageName geben die resultierenden SOAP-Nachrichten diesen Namen anstelle des tatsächlichen Methodennamens wider. Weitere Informationen finden Sie unter WebMethodAttribute.MessageName-Eigenschaft.

So stellen Sie einen Meldungsnamen für eine XML-Webdienstmethode bereit

  • Verwenden Sie die MessageName-Eigenschaft des WebMethod-Attributs wie im Folgenden gezeigt:

    Public Class Service1
        Inherits System.Web.Services.WebService
        <System.Web.Services.WebMethod(MessageName:="AddDoubles")> _
        Public Function Add(ByVal dValueOne As Double, _
                            ByVal dValueTwo As Double) As Double
            Add = dValueOne + dValueTwo
        End Function
        <System.Web.Services.WebMethod(MessageName:="AddIntegers")> _
        Public Function Add(ByVal iValueOne As Integer, _
                            ByVal iValueTwo As Integer) As Integer
            Add = iValueOne + iValueTwo
        End Function
    End Class
    
    public class Service1 : System.Web.Services.WebService
    { 
        [System.Web.Services.WebMethod(MessageName="AddDoubles")]
        public double Add(double dValueOne, double dValueTwo)
        {
           return dValueOne + dValueTwo;
        }
        [System.Web.Services.WebMethod(MessageName="AddIntegers")]
        public int Add(int iValueOne, int iValueTwo)
        {
           return iValueOne + iValueTwo;
        }
    }
    

    Die SOAP-Anforderungsmeldung für die Methode AddDoubles, die Double-Werte hinzufügt, sieht ungefähr wie folgt aus:

    POST /myWebService/Service1.asmx HTTP/1.1
    Host: localhost
    Content-Type: text/xml; charset=utf-8
    Content-Length: length
    SOAPAction: "http://tempuri.org/AddDoubles"
    
    <?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="https://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <AddDoubles xmlns="http://tempuri.org/">
          <dValueOne>double</dValueOne>
          <dValueTwo>double</dValueTwo>
        </AddDoubles>
      </soap:Body>
    </soap:Envelope>
    HTTP/1.1 200 OK
    Content-Type: text/xml; charset=utf-8
    Content-Length: length
    

    Die SOAP-Antwortmeldung für die Methode AddDoubles, die Double-Werte hinzufügt, sieht ungefähr wie folgt aus:

    <?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="https://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <AddDoublesResponse xmlns="http://tempuri.org/">
          <AddDoublesResult>double</AddDoublesResult>
        </AddDoublesResponse>
      </soap:Body>
    </soap:Envelope>
    

TransactionOption

Die TransactionOption-Eigenschaft des WebMethod-Attributs aktiviert die XML-Webdienstmethode, die als Stammobjekt einer Transaktion teilnehmen soll. Obwohl Sie für die TransactionOption-Eigenschaft einen der Werte der TransactionOption-Enumeration festlegen können, gibt es für eine XML-Webdienstmethode nur zwei mögliche Verhaltensweisen: sie nimmt nicht an einer Transaktion teil (Disabled, NotSupported, Supported), oder sie erstellt eine neue Transaktion (Required, RequiresNew). Wenn nichts anderes angegeben wurde, lautet der Standardwert TransactionOption.Disabled. Weitere Informationen finden Sie unter WebMethodAttribute.TransactionOption-Eigenschaft.

Zusätzlich zu den Voraussetzungen für XML-Webdienstmethoden ist ein Verweis auf System.EnterpriseServices.dll erforderlich. Dieser Namespace enthält Methoden und Eigenschaften, die das verteilte Transaktionsmodell von COM+-Diensten offen legen. Mit der System.EnterpriseServices.ContextUtil-Klasse können Sie über die SetAbort-Methode oder die SetComplete-Methode eine Entscheidung hinsichtlich der Transaktion treffen. Weitere Informationen finden Sie unter Teilnehmen an Transaktionen in mit ASP.NET erstellten XML-Webdiensten und Automatische Transaktionen und XML-Webdienste.

So erstellen Sie eine neue Transaktion mit einer XML-Webdienstmethode

  1. Fügen Sie einen Verweis auf System.EnterpriseServices.dll hinzu. Weitere Informationen finden Sie unter Hinzufügen und Entfernen von Verweisen.

  2. Fügen Sie dem XML-Webdienst den System.EnterpriseServices-Namespace wie unten gezeigt hinzu:

    Imports System.EnterpriseServices
    
    using System.EnterpriseServices;
    
  3. Verwenden Sie die TransactionOption-Eigenschaft des WebMethod-Attributs wie im Folgenden gezeigt:

    Public Class Service1
        Inherits System.Web.Services.WebService
        <System.Web.Services.WebMethod( _
           TransactionOption:=TransactionOption.RequiresNew)> _
        Public Function DoSomethingTransactional() As String
           'The transaction was successful...
           ContextUtil.SetComplete
           DoSomethingTransactional = ContextUtil.TransactionId.ToString()
        End Function
    End Class
    
    public class Service1 : System.Web.Services.WebService
    { 
        [System.Web.Services.WebMethod(
           TransactionOption=TransactionOption.RequiresNew)]
        public string DoSomethingTransactional()
        {
           // The transaction was successful...
           ContextUtil.SetComplete();
           return ContextUtil.TransactionId.ToString();
        }
    }
    

Siehe auch

Referenz

WebMethodAttribute

Weitere Ressourcen

Erstellen von Webdiensten in verwaltetem Code