Freigeben über


Interoperabilität mit ASP.NET Webdiensten

Die Interoperabilität zwischen ASP.NET Webdiensten und Wcf-Webdiensten (Windows Communication Foundation) kann erreicht werden, indem sichergestellt wird, dass dienste, die mit beiden Technologien implementiert werden, der WS-I Standardprofil 1.1-Spezifikation entsprechen. ASP.NET Webdienste, die WS-I Basic Profile 1.1 entsprechen, sind mit WCF-Clients kompatibel, indem sie die vom System bereitgestellte WCF-Bindung verwenden. BasicHttpBinding

Verwenden Sie die ASP.NET 2.0-Option, die WebService und WebMethodAttribute Attribute zu einer Schnittstelle hinzuzufügen, anstatt zu einer Klasse, und schreiben Sie eine Klasse, um die Schnittstelle zu implementieren, 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 bevorzugt, da die Schnittstelle mit dem WebService Attribut einen Vertrag für die vom Dienst ausgeführten Vorgänge darstellt, die mit verschiedenen Klassen wiederverwendet werden können, die denselben Vertrag auf unterschiedliche Weise implementieren können.

Vermeiden Sie es, das SoapDocumentServiceAttribute-Attribut zu verwenden, um Nachrichten basierend auf dem vollqualifizierten Namen des Body-Elements der SOAP-Nachricht anstatt des SOAPAction-HTTP-Headers an Methoden zu leiten. WCF verwendet den SOAPAction HTTP-Header zum Weiterleiten von Nachrichten.

Der XML-Code, in den ein Typ standardmäßig über XmlSerializer serialisiert wird, ist semantisch identisch mit dem XML-Code, in den der Typ über DataContractSerializer serialisiert wird, vorausgesetzt, der Namespace des XML-Codes ist explizit definiert. Beim Definieren eines Datentyps für die Verwendung mit ASP.NET-Webdiensten in Vorbereitung auf die Einführung von WCF gehen Sie wie folgt vor:

  • Definieren Sie den Typ mithilfe von .NET Framework-Klassen anstelle von XML-Schema.

  • Fügen Sie nur die SerializableAttribute Klasse und die XmlRootAttribute Klasse hinzu, indem Sie letztere verwenden, um den Namespace für den Typ explizit zu definieren. Fügen Sie keine zusätzlichen Attribute aus dem System.Xml.Serialization Namespace hinzu, um zu steuern, wie die .NET Framework-Klasse in XML übersetzt werden soll.

  • Durch die Übernahme dieses Ansatzes sollten Sie später die .NET-Klassen in Datenverträge umwandeln können, indem Sie DataContractAttribute und DataMemberAttribute hinzufügen, ohne den XML-Code erheblich zu ändern, in den die Klassen für die Übertragung serialisiert werden. Die in Nachrichten von ASP.NET-Webdiensten verwendeten Typen können als Datenverträge von WCF-Anwendungen verarbeitet werden, was unter anderem zu Vorteilen, insbesondere einer besseren Leistung in WCF-Anwendungen, führt.

Vermeiden Sie die Verwendung der Authentifizierungsoptionen, die von Internetinformationsdienste (Internet Information Services, IIS) bereitgestellt werden. WCF-Clients unterstützen sie nicht. Wenn ein Dienst gesichert werden muss, verwenden Sie die von WCF bereitgestellten Optionen, da diese Optionen robust sind und auf Standardprotokollen basieren.

Leistungseinbußen durch laden des ServiceModel HttpModule

In .NET Framework 3.0 wurde der WCF HttpModule in der Stammdatei Web.config installiert, sodass jede ASP.NET Anwendung WCF aktiviert war. Dies kann sich auf die Leistung auswirken, sodass Sie ServiceModel für die Web.config Datei entfernen können, wie im folgenden Beispiel gezeigt.

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

Siehe auch