Per Mausklick bewerten und Feedback geben
MSDN
MSDN Library
Entwicklerbibliothek
.NET-Entwicklung
Web Services
 Erste Schritte mit XML Web Services...

  Anzeige für geringe Bandbreite anschalten
Erste Schritte mit XML Web Services in Visual Studio .NET
Veröffentlicht: 03. Apr 2002 | Aktualisiert: 21. Jun 2004
Von Rob Caron

Microsoft® Visual Studio® .NET und XML Web Services bieten ein einfaches, flexibles und auf Standards basierendes Modell, das Entwicklern die Assemblierung von Anwendungen unabhängig von der Plattform, der Programmiersprache und dem Objektmodell ermöglicht. Dieser Artikel enthält eine Einführung in die Erstellung und den Zugriff auf XML Web Services mit Visual Studio .NET.

Auf dieser Seite

Einführung Einführung
XML Web Services in verwaltetem Code XML Web Services in verwaltetem Code
Erstellen von XML Web Services mit Visual Studio Erstellen von XML Web Services mit Visual Studio
Weitergeben von XML Web Services mit Visual Studio Weitergeben von XML Web Services mit Visual Studio
Zugreifen auf XML Web Services mit Visual Studio Zugreifen auf XML Web Services mit Visual Studio
Schlussfolgerung  Schlussfolgerung

Dieser Artikel enthält Links zu englischsprachigen Seiten.

Einführung

Ein XML Web Service ist eine programmierbare Einheit, auf die über das Internet von potenziell unterschiedlichen Systemen aus zugegriffen werden kann. XML Web Services hängen stark von einer breiten Akzeptanz von XML, HTTP und anderen Internetstandards ab, die Interoperabilität unterstützen.

Ein XML Web Service kann entweder intern von einer einzelnen Anwendung verwendet werden oder extern über das Internet für die Nutzung durch mehrere Anwendungen angezeigt werden. Der Zugriff auf einen XML Web Service erfolgt über eine Standardschnittstelle, wodurch heterogene Systeme zusammen als ein Computernetzwerk arbeiten können. Anstelle der generischen Leistungsmerkmale der Codeportabilität bieten XML Web Services eine praktische Lösung zur Umsetzung der Daten- und Systeminteroperabilität. XML Web Services verwenden XML-basiertes Messaging für den Austausch von Daten zwischen Systemen, die mit unterschiedlichen Komponentenmodellen, Betriebssystemen und Programmiersprachen arbeiten. Entwickler sind in der Lage, Anwendungen zu erstellen, bei denen XML Web Services aus einer Vielzahl von Quellen zusammengefügt werden, ähnlich wie dies traditionell bei der Verwendung von Komponenten in einer verteilten Anwendung der Fall ist. Eines der wichtigsten Merkmale eines XML Web Service ist das hohe Maß an Abstraktion, das zwischen der Implementierung und der Nutzung eines Dienstes existiert. Durch die Verwendung von XML-basiertem Messaging als Erstellungs- und Zugriffsmechanismus für den Dienst benötigen der XML Web Service-Client und der XML Web Service-Provider voneinander keine anderen Informationen als Eingaben, Ausgaben und die jeweilige Position. XML Web Services ermöglichen eine neue Ära der Entwicklung von verteilten Anwendungen. Eine enge Integration von Systemen unter Verwendung von proprietären Infrastrukturen geht auf Kosten der Anwendungsinteroperabilität. XML Web Services ermöglichen eine völlig neue Dimension der Interoperabilität, die eine wesentliche Erleichterung mit sich bringt. Als die nächste revolutionäre Entwicklungsstufe des Internets werden XML Web Services die grundlegende Struktur bilden, die alle Computer miteinander verbindet.

Weitere Informationen finden Sie unter Programming the Web with XML Web Services.

XML Web Services in verwaltetem Code

Das ASP.NET-Seitenframework dient auch als Framework für XML Web Services in verwaltetem Code. Dadurch können XML Web Services auf viele Funktionen des .NET Framework zugreifen, wie etwa Authentifizierung, Zwischenspeicherung und Statusverwaltung. Entwickler können sich dann voll auf die Erstellung von und den Zugriff auf XML Web Services konzentrieren, ohne Infrastrukturcode erstellen zu müssen.

Im ASP.NET-Anwendungsmodell besitzen Webseiten für den Browser die Erweiterung .aspx. Damit XML Web Services von regulären ASP.NET-Seiten unterschieden werden können, verwenden XML Web Services die Erweiterung .asmx.

XML Web Services bestehen aus einem XML Web Service-Einstiegspunkt und dem Code, der die Funktionalität für den XML Web Service implementiert. In ASP.NET dient die ASMX-Datei als der adressierbare Einstiegspunkt für den XML Web Service. Sie referenziert Code in vorkompilierten Assemblys, eine CodeBehind-Datei oder Code, der in der ASMF-Datei selbst enthalten ist.

Bei der Arbeit mit XML Web Services gibt es zwei grundsätzliche Rollen:

  • Erstellen eines XML Web Service - Dabei erstellen Sie eine Anwendung, die Funktionalität für XML Web Service-Clients zur Verfügung stellt.

  • Zugreifen auf einen XML Web Service - Beim Zugriff auf einen XML Web Service sucht, referenziert und verwendet Ihre Clientanwendung die Funktionalität, die im XML Web Service enthalten ist.

Bei XML Web Services kann es sich entweder um eigenständige Anwendungen oder Unterkomponenten einer größeren Webanwendung handeln. Als Minimalanforderung muss der Client in der Lage sein, Nachrichten an den XML Web Service zu senden.
Weitere Informationen finden Sie unter XML Web Services in Managed Code.

Erstellen von XML Web Services mit Visual Studio

Zur Erstellung von XML Web Services in verwaltetem Code mit Visual Studio müssen Sie auf einen Webserver zugreifen, der für die Bereitstellung von ASP.NET-Anwendungen konfiguriert ist, die im Kontext eines Webprojekts erstellt wurden. Es gibt verschiedene Arten von Webprojekten. Wenn Sie mit XML Web Services unter Verwendung von verwaltetem Code in Visual Studio .NET arbeiten möchten, verwenden Sie die Projektvorlage ASP.NET-Webdienst. Nach Erstellung eines XML Web Service-Projekts in Visual Studio wird der Komponenten-Designer angezeigt. Der Komponenten-Designer ist die Entwurfsoberfläche für den XML Web Service. In der Entwurfsansicht können Sie dem XML Web Service Komponenten hinzufügen und in der Codeansicht den mit Ihrem XML Web Service verknüpften Code anzeigen und bearbeiten.

Wenn Sie in Visual Studio ein ASP.NET-Web Service-Projekt erstellen, wird eine Struktur für ein Webanwendungsprojekt auf dem Webserver und eine Visual Studio-Projektmappendatei auf dem lokalen Computer erstellt. Die Projektmappendatei (.sln) enthält die Konfigurations- und Buildeinstellungen und verwaltet eine Liste der Dateien, die mit dem Projekt verknüpft sind. Darüber hinaus erstellt Visual Studio automatisch die erforderlichen Dateien und Referenzen zur Unterstützung eines XML Web Service. Nach Beendigung zeigt die Visual Studio-IDE die ASMX-Datei in der Entwurfsansicht an.

Standardmäßig verwendet Visual Studio so genannte "CodeBehind"-Dateien, wie etwa Service1.asmx.vb oder Service1.asmx.cs, wenn Sie einen XML Web Service mit der Projektvorlage ASP.NET-Webdienst erstellen. Die CodeBehind-Datei enthält den Code, der die Funktionalität des XML Web Service implementiert. Standardmäßig ist diese CodeBehind-Datei im Projektmappen-Explorer verborgen. Wenn Sie die Codeansicht der ASMX-Datei öffnen, sehen Sie tatsächlich den Inhalt dieser CodeBehind-Datei. Die ASMX-Datei selbst enthält eine Verarbeitungsdirektive, WebService, die angibt, wo sich die Implementierung des XML Web Service befindet. Wenn Sie einen XML Web Service in verwaltetem Code erstellen, liefert ASP.NET automatisch die Infrastruktur und übernimmt die Verarbeitung der XML Web Service-Anforderungen und -Antworten, einschließlich der Analyse und Erstellung von SOAP-Meldungen (SOAP, Simple Object Access Protocol). Bei der kompilierten Ausgabe handelt es sich um eine DLL-Datei, die im bin-Ordner des Projekts abgelegt wird.

Weitere Informationen finden Sie unter Creating XML Web Services in Managed Code.

"WebService"-Verarbeitungsdirektive
Die WebService-Verarbeitungsdirektive liefert der ASP.NET-Umgebung die erforderlichen Informationen, z.B. welche Klasse die Funktionalität des XML Web Service implementiert. Im Anschluss sehen Sie ein Beispiel einer WebService-Verarbeitungsdirektive in einer ASMX-Datei:

' Visual Basic 
<%@ WebService Language="vb" Codebehind="Service1.asmx.vb" 
    Class="WebService1.Service1" %> 
// C# 
<%@ WebService Language="c#" Codebehind="Service1.asmx.cs" 
    Class="WebService1.Service1" %>


Anmerkung Zum Anzeigen des Inhalts der ASMX-Datei im Projektmappen-Explorer klicken Sie mit der rechten Maustaste auf die ASMX-Datei und klicken im Kontextmenü auf Öffnen mit. Wählen Sie im Dialogfeld Öffnen mit die Option Quellcode-Editor (Text), und klicken Sie anschließend auf Öffnen.

Das Language-Attribut gibt die Programmiersprache an, die zur Entwicklung des XML Web Service verwendet wurde. Sie können XML Web Services in einer beliebigen .NET-kompatiblen Sprache erstellen, z.B. Visual Basic .NET oder Visual C#. Die mit der ASMX-Seite verknüpfte CodeBehind-Datei wird mit dem Codebehind-Attribut angezeigt. Das Class-Attribut gibt an, welche Klasse in der CodeBehind-Datei die Funktionalität des XML Web Service implementiert.

Weitere Informationen finden Sie unter Code Model for XML Web Services in Managed Code.

"System.Web.Services.WebService"-Klasse
Die System.Web.Services.WebService-Klasse, die die optionale Basisklasse für XML Web Services definiert, bietet direkten Zugriff auf allgemeine ASP.NET-Objekte, z.B. auf solche für den Anwendungs- und Sitzungsstatus. Standardmäßig erben XML Web Services, die in verwaltetem Code unter Verwendung von Visual Studio erstellt wurden, von dieser Klasse. Der XML Web Service kann von dieser Klasse erben, um Zugriff auf die systeminternen Objekte von ASP.NET zu erhalten, wie etwa Request und Session.

Erbt der XML Web Service nicht von dieser Klasse, kann dieser auf die systeminternen Objekte von ASP.NET über System.Web.HttpContext.Current zugreifen. Die Klasse, die den XML Web Service implementiert, muss öffentlich sein und über einen öffentlichen Standardkonstruktor verfügen (einen Konstruktur ohne Parameter). Dadurch ist ASP.NET in der Lage, eine Instanz der XML Web Service-Klasse zu erstellen, um eingehende XML Web Service-Anforderungen zu verarbeiten.

Weitere Informationen finden Sie unter Inheriting from the WebService Class.

"WebService"-Attribut
Jeder XML Web Service benötigt einen eindeutigen Namespace, der es Clientanwendungen ermöglicht, zwischen XML Web Services zu unterscheiden, die eventuell den gleichen Methodennamen verwenden. Der Standardnamespace für XML Web Services, die in Visual Studio .NET erstellt wurden, lautet "

http://tempuri.org/

". Obwohl dieser Namespace einem typischen URL ähnlich ist, sollten Sie nicht annehmen, dass dieser in einem Webbrowser angezeigt werden kann, es handelt sich lediglich um einen eindeutigen Bezeichner.
Anmerkung Sie können an dieser Position eine Webseite zur Verfügung stellen, die Informationen über Ihre XML Web Services enthält.

Das WebService-Attribut liefert die folgenden Eigenschaften:

  • Description - Der Wert dieser Eigenschaft enthält eine Meldung mit einer Beschreibung, die potenziellen Konsumenten des XML Web Service angezeigt wird, wenn Beschreibungsdokumente für den XML Web Service generiert werden, z.B. die Servicebeschreibung und die Hilfeseite des Dienstes.

  • Name - Der Wert dieser Eigenschaft enthält den Namen für den XML Web Service. Standardmäßig ist der Wert der Name der Klasse, die den XML Web Service implementiert. Die Name-Eigenschaft identifiziert den lokalen Teil des qualifizierten XML-Namens für den XML Web Service. Die Name-Eigenschaft dient auch zur Anzeige des Namens des XML Web Service auf der Hilfeseite des Dienstes.

  • Namespace - Der Wert dieser Eigenschaft enthält den Standardnamespace für den XML Web Service. XML-Namespaces bieten eine Möglichkeit zur Erstellung von Namen in einem XML-Dokument, die durch einen URI (Uniform Resource Identifier) gekennzeichnet sind. Durch die Verwendung von XML-Namespaces können Sie Elemente oder Attribute in einem XML-Dokument eindeutig identifizieren. Also dient innerhalb der Servicebeschreibung für einen XML Web Service Namespace als Standardnamespace für XML-Elemente, die sich direkt auf diesen XML Web Service beziehen. Bei Nichtangabe wird der Standardnamespace

    http://tempuri.org/
    

    verwendet.

Der folgende Beispielcode zeigt die Verwendung des WebService-Attributs:

' Visual Basic 
<WebService(Namespace:="http://MyServer/MyWebServices/", _ 
   Description:="Hier könnte eine Beschreibung stehen.", 
   Name:="MyFavoritesService")> _ 
Public Class Service1 
    Inherits System.Web.Services.WebService 
    ' Implementierungscode. 
End Class 
// C# 
[WebService(Namespace="http://MyServer/MyWebServices/", 
   Description="Hier könnte eine Beschreibung stehen.", 
   Name="MyFavoritesService")] 
public class Service1 : System.Web.Services.WebService 
{  
    // Implementierungscode. 
}

Weitere Informationen finden Sie unter Using the WebService Attribute.

"WebMethod"-Attribut
Wenn Sie einen XML Web Service in verwaltetem Code erstellen, geben Sie die Methoden an, die über diesen XML Web Service verfügbar sind, indem Sie das WebMethod-Attribut vor die Methodendeklaration einer Public-Methode stellen. Private-Methoden können nicht als Einstiegspunkt für einen XML Web Service dienen, wenn sie sich auch in derselben Klasse befinden können. Außerdem können sie vom Code des XML Web Service aufgerufen werden. Das WebMethod-Attribut muss auf jede öffentliche Methode angewendet werden, die als Teil des XML Web Services verfügbar ist.

Das WebMethod-Attribut enthält mehrere Eigenschaften, um das Verhalten eines XML Web Service zu konfigurieren. So können Sie beispielsweise mit diesem Attribut eine kurze Beschreibung zur Verfügung stellen, die auf der Hilfeseite des entsprechenden Dienstes angezeigt wird.
Das WebMethod-Attribut liefert die folgenden Eigenschaften:

  • BufferResponse - Wenn diese Eigenschaft auf den Standardwert TRUE gesetzt ist, puffert ASP.NET die gesamte Antwort, bevor diese an den Client weitergeleitet wird. Die Pufferung ist äußerst effizient und hilft bei einer Verbesserung der Leistungsfähigkeit, indem die Kommunikation zwischen dem Workerprozess und dem IIS-Prozess (Internet Information Services) minimiert wird. Wenn die Eigenschaft auf den Wert FALSE gesetzt ist, puffert ASP.NET die Antwort in Abschnitten von 16 KB. In der Regel setzen Sie diese Eigenschaft nur dann auf FALSE, wenn der gesamte Inhalt der Antwort nicht auf einmal in den Arbeitsspeicher geladen werden soll. Ein Beispiel ist das Zurückschreiben einer Auflistung, die ihre Einträge durch Streaming einer Datenbank entnimmt. Bei Fehlen weiterer Angaben ist der Standardwert TRUE.

  • CacheDuration - Der Wert dieser Eigenschaft gibt an, wie viele Sekunden ASP.NET die Ergebnisse für jede eindeutige Parametermenge zwischenspeichern soll. Bei Fehlen weiterer Angaben ist der Standardwert null, wodurch das Zwischenspeichern von Ergebnissen deaktiviert wird.

  • Description - Der Wert dieser Eigenschaft liefert eine Beschreibung für eine XML Web Service-Methode, die auf der Hilfeseite des Dienstes angezeigt wird. Bei Fehlen weiterer Angaben ist der Standardwert eine leere Zeichenfolge.

  • EnableSession - Wenn diese Eigenschaft auf die Standardeinstellung FALSE gesetzt ist, kann ASP.NET nicht auf den Sitzungsstatus für eine XML Web Service-Methode zugreifen. Wenn die Eigenschaft den Wert TRUE hat, kann der XML Web Service direkt auf die Auflistung des Sitzungsstatus über die Eigenschaft HttpContext.Current.Session zugreifen oder über die Eigenschaft WebService.Session, falls diese von der Basisklasse WebService erbt.

  • MessageName - Der Wert dieser Eigenschaft ermöglicht es dem XML Web Service, überladene Methoden eindeutig mit Hilfe eines Alias zu identifizieren. Bei Fehlen weiterer Angaben ist der Standardwert der Name der Methode. Bei Angabe eines Werts für MessageName spiegeln die resultierenden SOAP-Nachrichten diesen Namen anstelle des tatsächlichen Methodennamens wider.

  • TransactionOption - Der Wert dieser Eigenschaft gibt an, ob die XML Web Service-Methode als das Stammobjekt einer Transaktion teilnehmen kann. Obwohl Sie die TransactionOption-Eigenschaft auf einen beliebigen Wert der TransactionOption-Enumeration setzen können, verfügt eine XML Web Service-Methode nur über zwei mögliche Verhaltensweisen: Entweder sie nimmt nicht an einer Transaktion teil (Disabled, NotSupported, Supported), oder sie erstellt eine neue Transaktion (Required, RequiresNew). Bei Fehlen weiterer Angaben ist der Standardwert
    TransactionOption.Disabled. Für die Verwendung dieser Eigenschaft müssen Sie einen Verweis auf System.EnterpriseServices.dll hinzufügen. Dieser Namespace enthält Methoden und Eigenschaften, die das verteilte Transaktionsmodell von COM+-Diensten anzeigen. Die System.EnterpriseServices.ContextUtil-Klasse ermöglicht Ihnen das Abstimmen über die Klasse mit Hilfe der SetAbort- oder SetComplete-Methoden.

Der folgende Beispielcode zeigt die Verwendung des WebMethod-Attributs:

' Visual Basic 
Public Class Service1 
    Inherits System.Web.Services.WebService 
    <WebMethod(BufferResponse:=False, _ 
               CacheDuration:=60, _ 
               Description:="Text mit Beschreibung", 
               MessageName:="RetrieveData")> _ 
    Public Function GetBigChunkOfData() As DataSet 
        'Implementierungscode 
    End Function 
End Class 
// C# 
public class Service1 : System.Web.Services.WebService 
{  
    [WebMethod(BufferResponse=false, 
               CacheDuration=60, 
               Description="Text mit Beschreibung", 
               MessageName="RetrieveData")] 
    public DataSet GetBigChunkOfData() 
    { 
       //Implementierungscode 
    } 
}

Weitere Informationen finden Sie unter Using the WebMethod Attribute.

Weitergeben von XML Web Services mit Visual Studio

Bei Verwendung von Visual Studio .NET zur Erstellung von XML Web Services in verwaltetem Code können Sie ein Standardweitergabemodell verwenden: Sie kompilieren Ihr Projekt und geben die resultierenden Daten an einen Produktionsserver weiter. Die DLL-Datei des Projekts enthält die CodeBehind-Klassendatei der XML Web Services (.asmx.vb oder .asmx.cs) zusammen mit anderen Klassendateien, die im Projekt enthalten sind, jedoch nicht die ASMX-Datei selbst. Anschließend geben Sie diese einzelne DLL-Datei des Projekts an den Produktionsserver ohne weiteren Quellcode weiter. Sobald der XML Web Service eine Anfrage empfängt, wird die DLL-Datei des Projekts geladen und ausgeführt.

Bild01

Abbildung 1. Weitergeben eines XML Web Service


Wenn Sie den XML Web Service auf einem anderen Server als dem Weitergabeserver bereitstellen möchten, können Sie ein Websetup-Projekt hinzufügen oder die erforderlichen Dateien auf den Zielserver kopieren. Um den XML Web Service anderen Benutzern zur Verfügung zu stellen, müssen Sie diesen an einen Webserver weitergeben, der für die Clients zugänglich ist, die Sie unterstützen möchten.

Weitere Informationen finden Sie unter Deploying XML Web Services in Managed Code.

Hilfeseite des XML Web Service
Bei Aufruf von einem Webbrowser aus ohne Angabe einer erkannten Abfragezeichenfolge gibt die ASMX-Datei eine automatisch generierte Hilfeseite für den XML Web Service zurück.
Wenn Sie beispielsweise auf die Hilfeseite für einen XML Web Service mit der Bezeichnung Service1.asmx zugreifen möchten, der Teil eines Projekts mit der Bezeichnung WebService1 auf dem lokalen Computer ist, verwenden Sie den folgenden URL:

http://localhost/WebService1/Service1.asmx

Diese Hilfeseite enthält eine Liste der Methoden, die der XML Web Service zur Verfügung stellt und auf die Sie programmtechnisch zugreifen können. Jede Methode verfügt über eine Verknüpfung, die Sie zu zusätzlichen Informationen über diese Methode führt. Darüber hinaus enthält diese Seite eine Verknüpfung mit dem Beschreibungsdokument des XML Web Service.

Bild02

Abbildung 2. Hilfeseite des XML Web Service


Der Dateiname für die Hilfeseite wird im XML-Element <wsdlHelpGenerator> einer Konfigurationsdatei mit der Standardeinstellung DefaultWsdlHelpGenerator.aspx angegeben.
Standardmäßig haben alle XML Web Services auf diesem Computer dieses spezielle ASP.NET-Webformular gemeinsam:

\%WINDOWS% 
   \Microsoft.NET 
      \Framework 
         \[version] 
            \CONFIG 
               \DefaultWsdlHelpGenerator.aspx


Da es sich bei der Hilfeseite einfach um ein ASP.NET-Webformular handelt, kann sie ersetzt oder bearbeitet werden, um beispielsweise ein Firmenlogo einzufügen. Alternativ dazu können Sie das <wsdlHelpGenerator>-Element der damit verknüpften web.config-Datei bearbeiten, um eine benutzerdefinierte Hilfeseite anzugeben.

Weitere Informationen finden Sie unter <A
href="http://msdn.microsoft.com/library/en-us/cpguide/html/cpconconfigurationoptionsforaspnetwebservices.asp">Configuration
Options for XML Web Services Created Using ASP.NET.
Hilfeseite für Methode des XML Web Service
Die Hilfeseite für die Methode des XML Web Service enthält zusätzliche Informationen, die sich auf eine bestimmte Methode des XML Web Service beziehen. Die Seite bietet die Möglichkeit, die Methode mit dem HTTP-POST-Protokoll aufzurufen. Folglich können Sie keine Methoden aufrufen, die komplexe Typen als Eingabeparameter erfordern, z.B. DataSet. Zusätzlich muss die Methode des XML Web Service das HTTP-POST-Protokoll unterstützen, um diese Funktionalität zu aktivieren.
Am Ende der Hilfeseite für die Methode stehen Beispiele der Anforderungs- und Antwortnachrichten für die Protokolle, die von der Methode des XML Web Service unterstützt werden.

Bild03

Abbildung 3. Hilfeseite für Methode des XML Web Service


Wenn Sie beispielsweise auf die Hilfeseite für eine XML Web Service-Methode mit der Bezeichnung MyWebMethod in Service1.asmx zugreifen möchten, die Teil eines Projekts mit der Bezeichnung WebService1 auf dem lokalen Computer ist, verwenden Sie den folgenden URL:

http://localhost/WebService1/Service1.asmx?op=MyWebMethod

Weitere Informationen finden Sie unter Exploring XML Web Service Content.

Web Service Description (.wsdl)
Die Hilfeseite des Web Services enthält auch eine Verknüpfung mit der Servicebeschreibung des XML Web Service, bei der es sich um eine formale Definition der Funktionen des XML Web Service handelt. Die Servicebeschreibung ist ein Dokument, das die WSDL-Grammatik (Web Services Description Language) verwendet. Die Servicebeschreibung definiert die Konventionen für Nachrichtenformate, die Clients befolgen müssen, wenn sie Nachrichten mit dem XML Web Service austauschen.

Die WebService-Verarbeitungsdirektive liefert der ASP.NET-Umgebung die erforderlichen Informationen, z.B. welche Klasse die Funktionalität des XML Web Service implementiert. Im Anschluss sehen Sie ein Beispiel einer WebService-Verarbeitungsdirektive in einer ASMX-Datei:

WSDL-Beispiel

<?xml version="1.0" encoding="utf-8"?> 
<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
xmlns:s="http://www.w3.org/2001/XMLSchema"  
xmlns:s0="http://Walkthrough/XmlWebServices/"  
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"  
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"  
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"  
targetNamespace="http://Walkthrough/XmlWebServices/"  
xmlns="http://schemas.xmlsoap.org/wsdl/"> 
  <types> 
    <s:schema elementFormDefault="qualified"  
targetNamespace="http://Walkthrough/XmlWebServices/"> 
      <s:element name="ConvertTemperature"> 
        <s:complexType> 
          <s:sequence> 
            <s:element minOccurs="1" maxOccurs="1" name="dFahrenheit"  
type="s:double" /> 
          </s:sequence> 
        </s:complexType> 
      </s:element> 
      <s:element name="ConvertTemperatureResponse"> 
        <s:complexType> 
          <s:sequence> 
            <s:element minOccurs="1" maxOccurs="1"  
name="ConvertTemperatureResult" type="s:double" /> 
          </s:sequence> 
        </s:complexType> 
      </s:element> 
      <s:element name="double" type="s:double" /> 
    </s:schema> 
  </types> 
  <message name="ConvertTemperatureSoapIn"> 
    <part name="parameters" element="s0:ConvertTemperature" /> 
  </message> 
  <message name="ConvertTemperatureSoapOut"> 
    <part name="parameters" element="s0:ConvertTemperatureResponse" /> 
  </message> 
  <message name="ConvertTemperatureHttpGetIn"> 
    <part name="dFahrenheit" type="s:string" /> 
  </message> 
  <message name="ConvertTemperatureHttpGetOut"> 
    <part name="Body" element="s0:double" /> 
  </message> 
  <message name="ConvertTemperatureHttpPostIn"> 
    <part name="dFahrenheit" type="s:string" /> 
  </message> 
  <message name="ConvertTemperatureHttpPostOut"> 
    <part name="Body" element="s0:double" /> 
  </message> 
  <portType name="Service1Soap"> 
    <operation name="ConvertTemperature"> 
      <documentation>Diese Methode konvertiert eine Temperaturangabe 
von Grad Fahrenheit in Grad Celsius.</documentation> 
      <input message="s0:ConvertTemperatureSoapIn" /> 
      <output message="s0:ConvertTemperatureSoapOut" /> 
    </operation> 
  </portType> 
  <portType name="Service1HttpGet"> 
    <operation name="ConvertTemperature"> 
      <documentation>Diese Methode konvertiert eine Temperaturangabe 
von Grad Fahrenheit in Grad Celsius.</documentation> 
      <input message="s0:ConvertTemperatureHttpGetIn" /> 
      <output message="s0:ConvertTemperatureHttpGetOut" /> 
    </operation> 
  </portType> 
  <portType name="Service1HttpPost"> 
    <operation name="ConvertTemperature"> 
      <documentation>Diese Methode konvertiert eine Temperaturangabe 
von Grad Fahrenheit in Grad Celsius.</documentation> 
      <input message="s0:ConvertTemperatureHttpPostIn" /> 
      <output message="s0:ConvertTemperatureHttpPostOut" /> 
    </operation> 
  </portType> 
  <binding name="Service1Soap" type="s0:Service1Soap"> 
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http"  
style="document" /> 
    <operation name="ConvertTemperature"> 
      <soap:operation  
soapAction="http://Walkthrough/XmlWebServices/ConvertTemperature"  
style="document" /> 
      <input> 
        <soap:body use="literal" /> 
      </input> 
      <output> 
        <soap:body use="literal" /> 
      </output> 
    </operation> 
  </binding> 
  <binding name="Service1HttpGet" type="s0:Service1HttpGet"> 
    <http:binding verb="GET" /> 
    <operation name="ConvertTemperature"> 
      <http:operation location="/ConvertTemperature" /> 
      <input> 
        <http:urlEncoded /> 
      </input> 
      <output> 
        <mime:mimeXml part="Body" /> 
      </output> 
    </operation> 
  </binding> 
  <binding name="Service1HttpPost" type="s0:Service1HttpPost"> 
    <http:binding verb="POST" /> 
    <operation name="ConvertTemperature"> 
      <http:operation location="/ConvertTemperature" /> 
      <input> 
        <mime:content type="application/x-www-form-urlencoded" /> 
      </input> 
      <output> 
        <mime:mimeXml part="Body" /> 
      </output> 
    </operation> 
  </binding> 
  <service name="Service1"> 
    <documentation>Ein Dienst zur Temperaturkonvertierung.</documentation> 
    <port name="Service1Soap" binding="s0:Service1Soap"> 
      <soap:address  
location="http://localhost/TempConvert2/Service1.asmx" /> 
    </port> 
    <port name="Service1HttpGet" binding="s0:Service1HttpGet"> 
      <http:address  
location="http://localhost/TempConvert2/Service1.asmx" /> 
    </port> 
    <port name="Service1HttpPost" binding="s0:Service1HttpPost"> 
      <http:address  
location="http://localhost/TempConvert2/Service1.asmx" /> 
    </port> 
  </service> 
</definitions>

Wenn Sie beispielsweise auf die Servicebeschreibung für einen XML Web Service mit der Bezeichnung Service1.asmx zugreifen möchten, der Teil eines Projekts mit der Bezeichnung Temp2Convert auf dem lokalen Computer ist, verwenden Sie den folgenden URL:

http://localhost/TempConvert2/Service1.asmx?WSDL

Weitere Informationen finden Sie unter Web Services Description Language (WSDL) Explained.

XML Web Service-Discovery
XML Web Service-Discovery ist der Vorgang des Auffindens und der Abfrage von XML Web Service-Beschreibungen, der dem Zugriff auf einen XML Web Service vorausgeht. XML Web Service-Clients erfahren über den Discovery-Vorgang zur Entwurfszeit, ob ein XML Web Service vorhanden ist, über welche Funktionen er verfügt, und wie mit dem Dienst kommuniziert werden muss.

Jedoch muss eine Website, die einen XML Web Service implementiert, nicht unbedingt den Discovery-Vorgang unterstützen. Stattdessen könnte eine andere Site für die Beschreibung des Dienstes verantwortlich sein, z.B. ein XML Web Services-Verzeichnis. Andererseits gibt es eventuell keine öffentliche Möglichkeit für das Auffinden des Dienstes, z.B. wenn Sie den Dienst für die private Nutzung erstellen.
Weitere Informationen finden Sie unter XML Web Service Discovery.

Statische Discovery-Datei (.disco)
Sie können die programmtechnische Discovery eines XML Web Service aktivieren, indem Sie eine DISCO-Datei veröffentlichen. Dabei handelt es ich um ein XML-Dokument, das Verknüpfungen mit anderen Discovery-Dokumenten, XSD-Schemas und Servicebeschreibungen enthält. Mit ASP.NET erstellte XML Web Services sind automatisch in der Lage, ein generiertes Discovery-Dokument zur Verfügung zu stellen. Wenn Sie beispielsweise auf das Discovery-Dokument für einen XML Web Service mit der Bezeichnung Service1.asmx zugreifen möchten, der Teil eines Projekts mit der Bezeichnung WebService1 auf dem lokalen Computer ist, verwenden Sie den folgenden URL:

http://localhost/WebService1/Service1.asmx?DISCO

Das folgende Beispiel zeigt die Struktur eines Discovery-Dokuments:

<?xml version="1.0" ?> 
<disco:discovery  xmlns:disco="http://schemas.xmlsoap.org/disco" 
xmlns:wsdl="http://schemas.xmlsoap.org/disco/wsdl"> 
      <wsdl:contractRef ref="http://MyWebServer/UserName.asmx?WSDL"/> 
</disco:discovery>

Anmerkung
Das Discovery-Dokument dient als Container für Elemente, die i.d.R. Verknüpfungen (URLs) auf Ressourcen enthalten, die Discovery-Informationen für einen XML Web Service bieten. Bei relativen URLs wird vorausgesetzt, dass sich diese auf die Adresse des Discovery-Dokuments beziehen.

Weitere Informationen finden Sie unter Fine-Tuning Discovery Mechanisms.

Dynamische Discovery-Datei (.vsdisco)
Die dynamische Discovery ist ein Suchvorgang, bei dem ASP.NET eine Ordnerhierarchie auf einem Entwicklungswebserver durchläuft, um die verfügbaren XML Web Services zu finden. Bei einer dynamischen Discovery-Datei (.vdisco) handelt es sich um eine XML-basierte Datei, die null oder mehrere <exclude>-Knoten enthalten kann.
Jeder <exclude>-Knoten enthält ein path-Attribut, das den relativen Pfad zu einem Unterordner angibt, den der dynamische Discovery-Prozess nicht durchsuchen soll. Das folgende Beispiel zeigt eine VSDISCO-Datei:

<?xml version="1.0" encoding="utf-8" ?> 
<dynamicDiscovery xmlns="urn:schemas-dynamicdiscovery:disco.2000-03-17"> 
     <exclude path="_vti_cnf" /> 
     <exclude path="_vti_pvt" /> 
     <exclude path="_vti_log" /> 
     <exclude path="_vti_script" /> 
     <exclude path="_vti_txt" /> 
     <exclude path="Web References" /> 
</dynamicDiscovery>

Wenn die dynamische Discovery aktiviert ist und eine VSDISCO-Datei von einem Webserver angefordert wird, erfolgt die Rückgabe eines Discovery-Dokuments mit den Discovery-Informationen für jeden Web Service, der vom dynamischen Discovery-Prozess gefunden wurde. Standardmäßig ist die dynamische Discovery in web.config deaktiviert. Um die absolute Kontrolle darüber zu behalten, welche XML Web Services von Clients erkannt werden können, sollten Sie die dynamische Discovery nur auf Entwicklungswebservern verwenden. Bei der Weitergabe eines XML Web Service auf einen Produktionswebserver sollten Sie
stattdessen eine statische Discovery-Datei (.disco) für diejenigen XML Web Services erstellen, die von Clients erkannt werden sollen.
Weitere Informationen finden Sie unter Deploying XML Web Services in Managed Code.

Web Service-Verzeichnisse
Nach der Weitergabe des XML Web Services müssen Sie sich überlegen, wie dieser von Entwicklern gefunden werden kann, falls Sie eine Nutzung durch andere vorsehen. Eine gängige Methode für die Bekanntgabe der Verfügbarkeit eines XML Web Service ist die Registrierung in einem Verzeichnis mit XML Web Services. Das UDDI-Projekt (Universal Description, Discovery and Integration) enthält ein Verzeichnis mit Unternehmen und Diensten, die diese anbieten.
Weitere Informationen finden Sie unter XML Web Services Directories.

Zugreifen auf XML Web Services mit Visual Studio

Ein XML Web Service-Client ist eine beliebige Komponente oder Anwendung, die einen XML Web Service referenziert und verwendet. Dabei muss es sich nicht unbedingt um eine clientbasierte Anwendung handeln; so können dies in vielen Fällen andere Webanwendungen sein, z.B. Web Forms oder sogar andere XML Web Services. Beim Zugriff auf XML Web Services in verwaltetem Code wird der gesamte Infrastrukturcode von einer Proxyklasse und dem .NET Framework verarbeitet.

Der Zugriff auf einen XML Web Service von verwaltetem Code aus ist relativ einfach. Zunächst fügen Sie Ihrem Projekt einen Webverweis für den XML Web Service hinzu, auf den Sie zugreifen möchten. Der Webverweis erstellt eine Proxyklasse mit Methoden, die als Proxys für jede angezeigte Methode des XML Web Service dienen. Als Nächstes fügen Sie den Namespace für den Webverweis hinzu. Schließlich erstellen Sie eine Instanz der Proxyklasse und greifen anschließend auf die Methoden dieser Klasse wie bei jeder anderen Klasse zu.

Weitere Informationen finden Sie unter Accessing XML Web Services in Managed Code.

Suchen eines XML Web Service und Hinzufügen eines Webverweises
In bestimmten Situationen können Sie sowohl der Provider als auch der Konsument eines XML Web Service sein. In diesem Fall kennen Sie wahrscheinlich die Adresse und die Funktion des XML Web Service. In einem anderen Fall greifen Sie eventuell auf einen XML Web Service zu, der von einer anderen Person zur Verfügung gestellt wurde. Dabei wissen Sie eventuell noch nicht einmal, ob ein XML Web Service existiert, der Ihren Anforderungen entspricht.
Zur Vereinfachung des Codierungsmodells verwenden Anwendungen, die in verwaltetem Code erstellt wurden, einen Webverweis, um jeden XML Web Service lokal darzustellen. Sie fügen Ihrem Projekt einen Webverweis über das Dialogfeld Webverweis hinzufügen hinzu. In diesem Dialogfeld können Sie den lokalen Server, das Microsoft UDDI-Verzeichnis und das gesamte Internet nach XML Web Services durchsuchen.

Das Dialogfeld Webverweis hinzufügen verwendet den Discovery-Prozess für XML Web Services, um geeignete XML Web Services auf Websites zu finden, zu denen Sie im Dialogfeld navigieren. Für eine bestimmte Adresse wird die Website mit Hilfe eines Algorithmus untersucht, der dazu dient, XML Web Service-Discovery-Dokumente (.disco) und schließlich XML WSDL-Dokumente zu finden, die der Grammatik der Web Services Description Language (WSDL) entsprechen.
Nachdem Sie mit dem Dialogfeld Webverweis hinzufügen einen XML Web Service gefunden haben, auf den Ihre Anwendung zugreifen soll, wird Visual Studio durch Klicken auf die Schaltfläche Verweis hinzufügen angewiesen, eine Kopie der Servicebeschreibung auf den lokalen Computer downzuloaden und anschließend eine Proxyklasse für den Zugriff auf den gewählten XML Web Service zu generieren. Die Proxyklasse enthält Methoden für sowohl den synchronen als auch den asynchronen Aufruf jeder angezeigten XML Web Service-Methode.

Weitere Informationen finden Sie unter Locating XML Web Services.

Dynamische und statische URLs
Ein Webverweis kann entweder einen statischen oder einen dynamischen URL verwenden. Die Webverweis-URL-Eigenschaft eines Webverweises dient zur Angabe des URL des referenzierten XML Web Service. Standardmäßig ist diese Eigenschaft auf den URL des ausgewählten XML Web Service eingestellt, bei dem es sich um einen statischen URL handelt. Wenn Sie die Eigenschaft URL-Verhalten auf dem Standardwert Statisch belassen, wird die URL-Eigenschaft der Proxyklasse mit einem fest codierten URL festgelegt, wenn Sie eine Instanz dieser Klasse erstellen.
Wenn Sie die Eigenschaft URL-Verhalten des Webverweises auf Dynamisch einstellen, ruft die Anwendung den URL zur Laufzeit vom Abschnitt <appSettings> der Konfigurationsdatei Ihrer Anwendung ab. Beispiel:

<appSettings> 
   <add key="myApplication.myServer.Service1" 
        value="http://myServer/myXmlWebService/Service1.asmx"/> 
</appSettings>

Wenn Sie eine Instanz des Proxyobjekts erstellen, können Sie auch die URL-Eigenschaft des Objekts in Ihrer Anwendung programmtechnisch einstellen. Unabhängig davon, welcher URL vom Proxy verwendet wird, muss dieser für einen XML Web Service bestimmt sein, der mit einer WSDL-Beschreibung konform ist, die derjenigen entspricht, die beim Hinzufügen des Webverweises verwendet wurde. Ansonsten kann die früher generierte Proxyklasse damit nicht kommunizieren.
Alternativ dazu können Sie eine Proxyklasse mit demselben Tool (XML WSDL-Tool) generieren, das von Visual Studio zur Erstellung einer Proxyklasse beim Hinzufügen eines Webverweises verwendet wurde. Dies ist erforderlich, wenn Sie auf den XML Web Service nicht von dem Computer aus zugreifen können, auf dem Visual Studio installiert ist. Dies ist beispielsweise der Fall, wenn sich der XML Web Service auf einem Netzwerk befindet, das für den Client bis zur Laufzeit nicht zugänglich ist.
Anschließend fügen Sie die vom Tool generierte Datei zum Anwendungsprojekt hinzu.
Weitere Informationen finden Sie unter Managing Project Web References.

Verwenden der Proxyklasse
Der generierten Proxyklasse ist ein eigener Namespace zugeordnet, und Sie müssen diesen Namespace der Clientanwendung zuordnen, bevor Sie eine Instanz der Proxyklasse erstellen können. Wie bei jeder anderen Klasse müssen Sie zunächst eine Instanz davon erstellen, bevor Sie eine ihrer Methoden aufrufen können. Dieser Vorgang unterscheidet sich in keiner Weise von der Erstellung einer Instanz irgend einer anderen Klasse.
Bei Verwendung einer Proxyklasse, die Visual Studio direkt aus einer Servicebeschreibung eines XML Web Service generiert hat, ist der Zugriff auf einen XML Web Service in verwaltetem Code ein relativ einfacher Vorgang. Für den Zugriff auf die Methode eines XML Web Service ruft Ihre Clientanwendung entweder die entsprechende synchrone Methode oder die asynchronen Methoden des Proxyobjekts auf. Diese Methoden funktionieren nicht unbedingt zur Übertragung des Aufrufs über ein Netzwerk, um die gewünschte Methode des XML Web Service aufzurufen. Standardmäßig verwendet die Proxyklasse SOAP für den Zugriff auf die XML Web Service-Methode, da SOAP die umfangreichste Sammlung von Datentypen aus den drei unterstützten Protokollen unterstützt (HTTP-GET, HTTP-POST und HTTP-SOAP).
Die über den Prozess Webverweis hinzufügen generierte Proxyklasse wird von der Klasse System.Web.Service.Protocols.SoapHttpClientProtocol abgeleitet, über die Sie steuern können, wie diese Klasse auf einen XML Web Service zugreift.
Die SoapHttpClientProtocol-Klasse verfügt u.a. über die folgenden Eigenschaften:

  • ClientCertificates - Diese Eigenschaft ermöglicht einem Client bei Aufruf einer XML Web Service-Methode die Übergabe eines oder mehrerer Clientzertifikate. Diese werden auch als Authenticode X.509 v.3-Zertifikate bezeichnet.

  • CookieContainer - Verwendet eine XML Web Service-Methode Sitzungsstatus, dann wird ein Cookie in den Antwortheadern an den XML Web Service-Client zurückgegeben, der die Sitzung für diesen XML Web Service-Client eindeutig identifiziert. Damit der XML Web Service-Client diesen Cookie erhält, muss eine neue Instanz von CookieContainer erstellt und der CookieContainer-Eigenschaft zugewiesen werden, bevor die XML Web Service-Methode aufgerufen wird. Dies stellt sicher, dass der Cookie ordnungsgemäß in nachfolgenden Anforderungen enthalten ist.

  • Credentials - Bei Verwendung der Credentials-Eigenschaft muss ein XML Web Service-Client eine Klasse instanziieren, die ICredentials implementiert, z.B. NetworkCredential, und anschließend die Client-Anmeldeinformationen einstellen, die für den Authentifizierungsmechanismus spezifisch sind. Die NetworkCredential-Klasse kann zur Festlegung von Anmeldeinformationen für die Authentifizierung unter Verwendung folgender Authentifizierungsmechanismen verwendet werden: Standard, Digest, NTLM und Kerberos.

  • PreAuthenticate - Wenn PreAuthenticate den Wert TRUE hat, wird der WWW-authenticate-Header zusammen mit der ersten Anforderung gesendet, wenn der Authentifizierungsmechanismus dies unterstützt. Wenn PreAuthenticate den Wert FALSE hat, wird eine Anforderung an die XML Web Service-Methode gesendet, ohne zuerst den Benutzer zu authentifizieren. Wenn Sie wissen, dass der Service Authentifizierung benötigt, können Sie sich einen Roundtrip ersparen, indem Sie diese Eigenschaft auf TRUE setzen.

  • Proxy - Verwenden Sie diese Eigenschaft, wenn ein Client andere Proxyeinstellungen als diejenigen in den Systemeinstellungen verwenden muss. Sie können Proxyeinstellungen mit der WebProxy-Klasse festlegen, da diese IWebProxy implementiert. Die Standardproxyeinstellungen lassen sich auch in der Konfigurationsdatei festlegen.

  • Timeout - Der Timeout in Millisekunden für synchrone Aufrufe des XML Web Service. Die Standardeinstellung beträgt 100.000 Millisekunden. Das Festlegen der Timeout-Eigenschaft auf den Wert
    Timeout.Infinite gibt an, dass die Anforderung das Zeitlimit nicht überschreitet. Jedoch ist es immer noch möglich, dass der Webserver eine Zeitlimitüberschreitung der Anforderung auf der Serverseite bewirkt.

  • Url - Der Standardwert für diese Eigenschaft wird vom location-Attribut in der Servicebeschreibung bestimmt, aus der die Proxyklasse generiert wurde.

Weitere Informationen finden Sie unter SoapHttpClientProtocol Class.

Aufrufen der XML Web Service-Methoden

Nach dem Hinzufügen eines Webverweises zu einem XML Web Service können Sie die angezeigten Methoden dieses XML Web Services aufrufen und auf die Ergebnisse zugreifen, wie dies bei jeder anderen Methode einer Komponente der Fall ist.
Im nachfolgenden Beispielcode greift die Clientanwendung (Application1) auf einen XML Web Service zu, für den sie über einen Webverweis (Converter) verfügt, der eine Proxyklasse enthält (Service1). Diese wiederum verfügt über eine Methode (ConvertTemperature) zum Aufrufen des XML Web Service. Die beiden Codezeilen in Fettschrift repräsentieren den Code, der für den Zugriff auf den XML Web Service erforderlich ist.

' Visual Basic
Imports System
Module Module1
    Sub Main()
        Dim cService As New Converter.Service1()
        Dim dFahrenheit As Double
        Dim dCelsius As Double
        Console.Write("Temperatur in Grad Fahrenheit: ")
        dFahrenheit = Convert.ToDouble(Console.ReadLine())
        dCelsius = cService.ConvertTemperature(dFahrenheit)
        Console.Write("Temperatur in Grad Celsius: ")
        Console.WriteLine(dCelsius.ToString())
    End SubEnd Module
// C#
using System;
namespace Application1
{
   class Class1
   {
      static void Main()
      {
         Converter.Service1 cService = new Converter.Service1();
         Console.WriteLine("Temperatur in Grad Fahrenheit: ");
         double dFahrenheit = Convert.ToDouble(Console.ReadLine());
         double dCelsius = cService.ConvertTemperature(dFahrenheit);
         Console.Write("Temperatur in Grad Celsius: ");
         Console.WriteLine(dCelsius.ToString());
      }
   }
}

Weitere Informationen finden Sie unter Accessing XML Web Services in Managed Code.

Schlussfolgerung

XML Web Services bieten die Möglichkeit für den Austausch von Nachrichten in einer Umgebung mit flexiblen Verbindungen, in der die Standardprotokolle HTTP, XML, SOAP und WSDL zum Einsatz kommen. Diese Nachrichten können strukturiert und typisiert oder flexibel definiert sein. Da Standardprotokolle als Basis für XML Web Services dienen, können Ihre XML Web Service-Anwendungen mit einer Vielzahl von Implementierungen, Plattformen und Geräten kommunizieren.
Sie erstellen XML Web Services mit dem ASP.NET-Seitenframework, wodurch diese XML Web Services auf die vielen Funktionen des .NET Frameworks zugreifen können. Da ASP.NET und das .NET Framework die Basis für XML Web Services in verwaltetem Code bilden, können sich Entwickler auf die Erstellung oder den Zugriff auf XML Web Services konzentrieren, ohne Infrastrukturcode erstellen zu müssen.
Bei Verwendung einer Proxyklasse, die Visual Studio direkt aus einer Servicebeschreibung eines XML Web Service generiert hat, ist der Zugriff auf einen XML Web Service in verwaltetem Code ein relativ einfacher Vorgang. Die Proxyklasse übernimmt die Umwandlung des Methodenaufrufs in eine Anforderungsnachricht und die Rückwandlung der Antwortnachricht in einen Methodenrückgabewert.
Schrittweise Beschreibungen für die Erstellung von und den Zugriff auf XML Web Services in Visual Studio .NET finden Sie unter Creating and Accessing XML Web Services Walkthroughs und Support WebCast: Microsoft .NET: Introduction to Web Services (Supportwebcast: Einführung Microsoft .NET: auf Webdienst).


© 2009 Microsoft Corporation. Alle Rechte vorbehalten. Nutzungsbedingungen  |  Markenzeichen  |  Informationen zur Datensicherheit
Page view tracker