Interoperabilität mit ASP.NET-Webdiensten

Zwischen ASP.NET-Webdiensten und WCF-Webdiensten (Windows Communication Foundation) lässt sich Interoperabilität erreichen, indem sichergestellt wird, dass die mit beiden Technologien implementierten Dienste der Spezifikation „WS-I Basic Profile 1.1“ entsprechen. ASP.NET-Webdienste, die WS-I Basic Profile 1.1 entsprechen, sind unter Verwendung der vom WCF-System bereitgestellten BasicHttpBinding-Bindung mit WCF-Clients interoperabel.

Verwenden Sie die ASP.NET 2.0-Option, um die Attribute WebService und WebMethodAttribute zu einer Schnittstelle statt zu einer Klasse hinzuzufügen und zum Implementieren der Schnittstelle eine Klasse zu schreiben, wie im folgenden Beispielcode gezeigt.

[WebService]  
public interface IEcho  
{  
    [WebMethod]  
    string Echo(string input);  
}  
  
public class Service : IEcho  
{  
  
   public string Echo(string input)  
   {  
        return input;  
    }  
}  

Die Verwendung dieser Option wird empfohlen, da die Schnittstelle mit dem WebService-Attribut einen Vertrag für die vom Dienst ausgeführten Vorgänge darstellt. Dieser Vertrag kann wiederholt für verschiedene Klassen verwendet werden, die den gleichen Vertrag möglicherweise auf unterschiedliche Art und Weise implementieren.

Verwenden Sie das SoapDocumentServiceAttribute-Attribut nicht, um Nachrichten basierend auf dem voll qualifizierten Namen des Textelements der SOAP-Nachricht anstatt des SOAPAction-HTTP-Headers an Methoden weiterzuleiten. WCF verwendet den SOAPAction-HTTP-Header zum Weiterleiten von Nachrichten.

Die XML, in die XmlSerializer standardmäßig einen Typ serialisiert, ist semantisch identisch mit der XML, in die DataContractSerializer einen Typ serialisiert, vorausgesetzt, der Namespace ist für die XML explizit definiert. Um zur Vorbereitung auf die Einführung von WCF einen Datentyp für die Verwendung mit ASP.NET-Webdiensten zu definieren, gehen Sie folgendermaßen vor:

  • Definieren Sie den Typ mit .NET Framework-Klassen und nicht mit dem XML-Schema.

  • Fügen Sie der Klasse lediglich SerializableAttribute und XmlRootAttribute hinzu, wobei Sie mit dem zweiten Attribut den Namespace für den Typ explizit definieren. Fügen Sie keine zusätzlichen Attribute aus dem System.Xml.Serialization-Namespace hinzu, um die Übersetzung der .NET Framework-Klasse in XML zu steuern.

  • Wenn Sie diese Vorgehensweise wählen, sollte es später kein Problem darstellen, die .NET-Klassen in Datenverträge umzuwandeln, indem Sie DataContractAttribute und DataMemberAttribute hinzufügen, ohne die XML erheblich zu ändern, in die die Klassen für die Übertragung serialisiert werden. Die von ASP.NET-Webdiensten in Nachrichten verwendeten Typen können von WCF-Anwendungen als Datenverträge verarbeitet werden, was u. a. zu einer besseren Leistung bei WCF-Anwendungen führt.

Vermeiden Sie die Verwendung der von den Internetinformationsdiensten (IIS) bereitgestellten Authentifizierungsoptionen. WCF-Clients unterstützen diese nicht. Wenn ein Dienst geschützt werden muss, verwenden Sie die von WCF bereitgestellten Funktionen, da diese Optionen stabil sind und auf Standardprotokollen basieren.

Durch das Laden von ServiceModel HttpModule verursachte Leistungsbeeinträchtigungen

In .NET Framework 3.0 wurde das WCF-HttpModule-Element in der Web.config-Stammdatei installiert, sodass jede ASP.NET-Anwendung für WCF aktiviert war. Dies kann die Leistung beeinträchtigen. Sie können daher ServiceModel für die Datei Web.config entfernen, wie im folgenden Bespiel gezeigt.

<httpModules>  
    <remove name="ServiceModel" />  
</httpModules>

Siehe auch