Deklarieren eines XML-Webdienstes
Wenn Sie einen XML-Webdienst in ASP.NET erstellen, fügen Sie die erforderliche @ WebService-Direktive am Anfang einer Textdatei mit der Dateinamenerweiterung .asmx ein. Durch das Vorhandensein der ASMX-Datei und der @ WebService-Direktive wird die URL-Adresse des XML-Webdienstes mit seiner Implementierung in Wechselbeziehung gesetzt. Als nächstes implementieren Sie die XML-Webdienstklasse, durch die die Methoden und Datentypen definiert werden, die für XML-Webdienstclients sichtbar sind. Zum Schluss fügen Sie diesen Methoden Ihre XML-Webdienstlogik hinzu, um XML-Webdienstanforderungen zu verarbeiten und Antworten zurückzusenden. Sie können die von Ihnen definierte XML-Webdienstklasse entweder direkt in die ASMX-Datei oder aber in eine separate Datei aufnehmen. Wenn Sie eine separate Datei verwenden, muss diese in eine Assembly kompiliert werden. Optional können Sie ein WebService-Attribut auf die Klasse anwenden, durch die der XML-Webdienst implementiert wird. Die Klasse, durch die der XML-Webdienst implementiert wird, kann von der WebService-Klasse abgeleitet werden.
So deklarieren Sie einen XML-Webdienst, dessen Implementierung sich in derselben Datei befindet
Fügen Sie am Anfang einer Datei mit der Erweiterung .asmx eine @ WebService-Direktive ein. In dieser Direktive geben Sie die Klasse für die Implementierung des XML-Webdienstes und die in der Implementierung verwendete Programmiersprache an.
Das Class-Attribut kann auf eine Klasse festgelegt werden, die sich in derselben Assembly befindet wie die @ WebService-Direktive, oder auf eine Klasse innerhalb einer separaten Assembly. Wenn sich die Klasse in einer separaten Assembly befindet, muss sie im Verzeichnis \Bin unter der Webanwendung abgelegt werden, in der der XML-Webdienst enthalten ist. Das Language-Attribut kann auf C#, VB und JS gesetzt werden. Diese Werte stehen für C#, Visual Basic .NET bzw. JScript .NET.
Im folgenden Codebeispiel wird das Language-Attribut der @ WebService-Direktive auf C# und das Class-Attribut, das sich in derselben Datei befindet, auf
MyMath
** festgelegt.<%@ WebService Language="C#" Class="MyMath" %> using System.Web.Services; public class MyMath { [ WebMethod ] public int Add(int num1, int num2) { return num1+num2; } }
So deklarieren Sie einen XML-Webdienst, dessen Implementierung sich in einer Assembly befindet
Fügen Sie am Anfang einer Datei mit der Erweiterung .asmx eine @ WebService-Direktive ein. In dieser Direktive geben Sie die Klasse für die Implementierung des XML-Webdienstes, die Assembly, in der die Implementierung enthalten ist, sowie die in der Implementierung verwendete Programmiersprache an.
Die folgende @ WebService-Direktive ist die einzige Zeile in einer Datei mit der Erweiterung .asmx. Sie gibt an, dass sich die
MyName.MyWebService
-Klasse in der AssemblyMyAssembly
im Verzeichnis \Bin der Webanwendung befindet, die den Host des XML-Webdienstes darstellt.<%@ WebService Language="C#" Class="MyName.MyWebService,MyAssembly" %> [Visual Basic] <%@ WebService Language="VB" Class="MyName.MyWebService,MyAssembly" %>
**Hinweis **Wenn Sie innerhalb der @ WebService-Direktive keine Assembly angeben, durchsucht ASP.NET beim ersten Zugriff auf den XML-Webdienst die Assemblyliste im Verzeichnis \Bin der Webanwendung, die den Host dieses XML-Webdienstes darstellt. Die Leistung beim Erstzugriff kann also deutlich erhöht werden, indem Sie den Assemblynamen angeben.
Anwenden des WebService-Attributs
Durch Anwenden des optionalen WebService-Attributs auf eine Klasse, die einen XML-Webdienst implementiert, können Sie den XML-Standardnamespace für den XML-Webdienst zusammen mit einer Zeichenfolge festlegen, die den XML-Webdienst beschreibt.
Es wird dringend empfohlen, diesen Standardnamespace (http://tempuri.org) zu ändern, bevor der XML-Webdienst öffentlich bereitgestellt wird. Der Grund dafür ist, dass sich der XML-Webdienst von anderen XML-Webdiensten unterscheiden muss, bei denen der Namespace versehentlich als Standardeinstellung (<http://tempuri.org/>) verwendet wird.
So legen Sie den XML-Namespace fest, dem der XML-Webdienst als Member angehört
- Wenden Sie ein WebService-Attribut auf die Klasse zur Implementierung des XML-Webdienstes an, indem Sie die Namespace-Eigenschaft festlegen.
Im folgenden Codebeispiel wird der XML-Namespace auf https://www.contoso.com/ festgelegt.
<%@ WebService Language="C#" Class="Math" Debug=true%>
using System.Web.Services;
using System;
[WebService(Namespace="https://www.contoso.com/")]
public class Math {
[ WebMethod ]
public int Add(int num1, int num2) {
return num1+num2;
}
}
[Visual Basic]
<%@ WebService Language="VB" Class="Math"%>
Imports System.Web.Services
Imports System
<WebService(Namespace:="https://www.contoso.com/")> _
Public Class Math
<WebMethod()> _
Public Function Add(num1 As Integer, num2 As Integer) _
As Integer
Return num1 + num2
End Function
End Class
Ableiten von der WebService-Klasse
Klassen, durch die ein mit ASP.NET erstellter XML-Webdienst implementiert wird, können optional von der WebService-Klasse abgeleitet werden, damit sie Zugriff auf allgemeine ASP.NET-Objekte wie Application, Session, User und Context erhalten. Die Eigenschaften Application und Session ermöglichen über die Lebensdauer der Webanwendung oder einer bestimmten Sitzung das Speichern und Empfangen von Statusinformationen. Weitere Informationen zur Statusverwaltung finden Sie unter Statusverwaltung in mit ASP.NET erstellten XML-Webdiensten. Die User-Eigenschaft enthält die Identität des Aufrufers für den XML-Webdienst, falls die Authentifizierung aktiviert ist. Anhand der Identität kann ein XML-Webdienst feststellen, ob die Anforderung autorisiert ist. Weitere Informationen zur Authentifizierung finden Sie unter Sichern von mit ASP.NET erstellten XML-Webdiensten. Die Context-Eigenschaft ermöglicht den Zugriff auf alle HTTP-spezifischen Informationen zur Anforderung des XML-Webdienstclients. Weitere Informationen zur Context-Eigenschaft erhalten Sie unter WebService.Context-Eigenschaft.
Im folgenden Codebeispiel wird mit Hilfe der Context-Eigenschaft die Uhrzeit der Anforderung an den Server abgerufen.
<%@ WebService Language="C#" Class="Util" %>
using System;
using System.Web.Services;
public class Util: WebService {
[ WebMethod(Description="Returns the time as stored on the Server",
EnableSession=false)]
public string Time()
{
return Context.Timestamp.TimeOfDay.ToString();
}
}
[Visual Basic]
<%@ WebService Language="VB" Class="Util" %>
Imports System
Imports System.Web.Services
Public Class Util
Inherits WebService
<WebMethod(Description := "Returns the time as stored on the Server", _
EnableSession := False)> _
Public Function Time() As String
Return Context.Timestamp.TimeOfDay.ToString()
End Function
End Class
Siehe auch
Definieren von XML-Webdienstmethoden | Erstellen von XML-Webdiensten mit ASP.NET | Grundlagen beim Erstellen von XML-Webdiensten mit ASP.NET