Codemodell für Webdienste in verwaltetem Code

Aktualisiert: November 2007

Webdienste bestehen aus zwei Teilen: dem Einstiegspunkt des Webdiensts und dem Code, der die Funktionen des Webdiensts implementiert. In ASP.NET ist die ASMX-Datei eine Textdatei, die als adressierbarer Einstiegspunkt für den Webdienst fungiert. Sie verweist auf Code in vorkompilierten Assemblys, eine Code-Behind-Datei oder auf Code, der in der ASMX-Datei selbst enthalten ist.

Hinweis:

Wenn der Code direkt in der ASMX-Datei enthalten ist, kompiliert ASP.NET den Code auf Anforderung auf dem Server.

Die WebService-Verarbeitungsdirektive am Anfang der ASMX-Datei legt fest, wo die Implementierung des Webdiensts zu finden ist. Visual Studio verwendet beim Erstellen von Webdiensten mit der Projektvorlage für ASP.NET-Webdienste standardmäßig Code-Behind-Dateien, wie Service1.asmx.vb oder Service1.asmx.cs.

Hinweis:

Visual Studio unterstützt kein sprachübergreifendes Kompilieren. Deshalb ist es z. B. nicht möglich, einen Webdienst in Visual C# in ein ASP.NET-Webanwendungsprojekt für Visual Basic zu integrieren und umgekehrt.

Beim Erstellen eines Webdiensts in verwaltetem Code stellt ASP.NET automatisch die Infrastruktur bereit und behandelt die Verarbeitung von Webdienstanforderungen und -reaktionen, einschließlich der Analyse und Erstellung von SOAP-Nachrichten.

WebService-Verarbeitungsdirektive

Am Anfang der ASMX-Seite befindet sich eine WebService-Verarbeitungsdirektive mit Informationen in Form von Attributen, die sich auf die Implementierung des Webdiensts beziehen. Diese Verarbeitungsdirektive stellt die für die ASP.NET-Umgebung erforderlichen Informationen bereit, z. B. zu der Klasse, die die Webdienstfunktionen implementiert. Das folgende Beispiel zeigt eine WebService-Verarbeitungsdirektive:

[Visual Basic]
<%@ WebService Language="vb" Codebehind="Service1.asmx.vb"
    Class="WebService1.Service1" %>


[C#]
<%@ WebService Language="c#" Codebehind="Service1.asmx.cs"
    Class="WebService1.Service1" %>

Das Language-Attribut gibt die Programmiersprache an, die für die Entwicklung des Webdiensts verwendet wurde. Webdienste können in jeder .NET-kompatiblen Programmiersprache, wie Visual Basic .NET oder C#, erstellt werden.

Beim Erstellen von Webdiensten in verwaltetem Code mit Visual Studio .NET ist der Webdienst in einer Code-Behind-Datei gespeichert. Die CodeBehind-Datei ist der ASMX-Seite über das Codebehind-Attribut zugeordnet.

Hinweis:

Dieses Attribut unterstützt Visual Studio bei der Verwaltung Ihres Webdienstprojekts und ist zur Laufzeit nicht erforderlich.

Wenn Sie die Projektvorlage für ASP.NET-Webdienste verwenden, gibt das Class-Attribut die Klasse an, die die Funktionen des Webdiensts in der Code-Behind-Datei implementiert.

Visual Studio .NET fügt diese Verarbeitungsdirektive automatisch der ASMX-Datei ein, wenn Sie die Vorlage für ASP.NET-Webdienstprojekte verwenden.

Tipp:

Wenn Sie die Klasse umbenennen, müssen Sie auch den Klassennamen im Class-Attribut der WebService-Direktive ändern.

Hinweis:

Um den Inhalt der ASMX-Datei anzuzeigen, klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die ASMX-Datei, und klicken Sie anschließend im Kontextmenü auf Öffnen mit. Wählen Sie im Dialogfeld Öffnen mit die Option Quellcode-Editor (Text) aus, und klicken Sie dann auf Öffnen.

Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Erstellen eines einfachen XML-Webdiensts mithilfe von ASP.NET.

System.Web.Services.WebService-Klasse

Die System.Web.Services.WebService-Klasse, die die optionale Basisklasse für Webdienste definiert, bietet einen direkten Zugriff auf allgemeine ASP.NET-Objekte, z. B. solche für den Anwendungs- und den Sitzungszustand. Standardmäßig erben Webdienste, die mit Visual Studio in verwaltetem Code erstellt wurden, von dieser Klasse. Der Webdienst kann von dieser Klasse erben, um Zugriff auf die internen Objekte von ASP.NET, z. B. Request und Session, zu erhalten. Weitere Informationen finden Sie unter WebService-Klasse.

Wenn der Webdienst nicht von dieser Klasse erbt, kann er auf die systeminternen ASP.NET-Objekte von System.Web.HttpContext.Current aus zugreifen. Die den Webdienst implementierende Klasse muss öffentlich sein und über einen öffentlichen Standardkonstruktor verfügen (einen Konstruktor ohne Parameter). Dadurch kann ASP.NET eine Instanz der Webdienstklasse erstellen, um eingehende Webdienstanforderungen zu verarbeiten. Weitere Informationen finden Sie unter HttpContext.Current-Eigenschaft.

[Visual Basic]
Imports System.Web.Services
Public Class Service1
   Inherits System.Web.Services.WebService
   ' Implementation code.
End Class


[C#]
using System.Web.Services;
public class Service1 : System.Web.Services.WebService
{
   // Implementation code.
}

Weitere Informationen finden Sie unter Erben von der WebService-Klasse.

WebService-Attribut

Für jeden Webdienst ist ein eindeutiger Namespace erforderlich, über den Clientanwendungen verschiedene Webdienste unterscheiden können, die möglicherweise denselben Methodennamen verwenden. Der in Visual Studio .NET erstellte Standardnamespace für Webdienste ist http://tempuri.org/WebService1/Service1, wobei WebService1 der Projektname und Service1 der Klassenname ist. Obwohl der Namespace einer typischen URL ähnelt, sollten Sie nicht davon ausgehen, dass er in einem Webbrowser angezeigt werden kann, weil es sich lediglich um einen eindeutigen Bezeichner handelt.

Hinweis:

Sie können hier jedoch eine Webseite angeben, die Informationen zu den von Ihnen bereitgestellten Webdienste enthält.

Wenn Sie das WebService-Attribut verwenden, können Sie den Namespace und eine kurze Beschreibung des Webdiensts angeben. Diese Kurzbeschreibung wird auf der Hilfeseite des Diensts angezeigt, wenn Sie den Webdienst ohne Angabe einer Abfragezeichenfolge über einen Browser aufrufen:

[Visual Basic]
<System.Web.Services.WebService( _ 
   Namespace:="http://tempuri.org/WebService1/Service1", _ 
   Description:="A short description of the Web service.")> _
Public Class Service1
   Inherits System.Web.Services.WebService
   ' Implementation code.
End Class


[C#]
[System.Web.Services.WebService( 
   Namespace="http://tempuri.org/WebService1/Service1",  
   Description="A short description of the Web service.")] 
public class Service1 : System.Web.Services.WebService
{
   // Implementation code.
}

Weitere Informationen finden Sie unter WebServiceAttribute-Klasse und Verwenden des WebService-Attributs.

Anwenden des WebMethod-Attributs

Um eine Methode als Teil eines Webdiensts verfügbar zu machen, müssen Sie ein WebMethod-Attribut vor die Deklaration jeder öffentlichen Methode stellen, die Sie offen legen möchten. Weitere Informationen hierzu finden Sie unter Gewusst wie: Erstellen einer Webdienstmethode.

[Visual Basic]
<System.Web.Services.WebMethod()> _
Public Function MyString(ByVal x as string) As String
   ' Implementation code.
End Function


[C#]
[System.Web.Services.WebMethod()] 
public string MyString(string x) 
{
   //implementation code
}

Das WebMethod-Attribut enthält mehrere Eigenschaften, um das Verhalten des Webdiensts zu konfigurieren. Weitere Informationen finden Sie unter WebMethodAttribute-Klasse und Verwenden des WebMethod-Attributs. Sie können dieses Attribut z. B. für eine kurze Beschreibung verwenden, die auf der zugehörigen Diensthilfeseite angezeigt wird:

[Visual Basic]
<System.Web.Services.WebMethod( _ 
   Description:="A short description of this method.")> _
Public Function MyString(ByVal x as string) As String
   ' Implementation code.
End Function


[C#]
[System.Web.Services.WebMethod( 
   Description="A short description of this method.")] 
public string MyString(string x) 
{
   // Implementation code.
}

Trennen Sie mehrere Eigenschaften jeweils durch ein Komma. Wenn Sie z. B. eine Beschreibung bereitstellen und die Ergebnisse eines Webdiensts 60 Sekunden lang zwischenspeichern möchten, sieht der Code wie folgt aus:

[Visual Basic]
<System.Web.Services.WebMethod( _ 
   Description:="A short description of this method.", _ 
           CacheDuration:=60)> _
Public Function MyString(ByVal x as string) As String
   ' Implementation code.
End Function


[C#]
[System.Web.Services.WebMethod( 
   Description="A short description of this method.", 
   CacheDuration=60)] 
public string MyString(string x) 
{
   // Implementation code.
}

Zusammenfassung

Jeder Webdienst besteht aus einer ASMX-Datei und einer Webdienstklasse. Die ASMX-Datei enthält eine WebService-Verarbeitungsdirektive, die auf die Klasse verweist. Die Webdienstklasse ist öffentlich, besitzt einen öffentlichen Standardkonstruktor und enthält mindestens eine öffentliche Methode, die mit dem WebMethod-Attribut gekennzeichnet ist. Das folgende Diagramm veranschaulicht die Beziehung zwischen dem Projekt, der Klasse, ihren Methoden und dem resultierenden Webdienst.

WebService-Klassen und resultierende Elemente

Siehe auch

Konzepte

Codemodell für den Zugriff auf Webdienste in verwaltetem Code

Weitere Ressourcen

Erstellen von Webdiensten in verwaltetem Code