Interoperabilität mit ASP.NET-Webdiensten

Eine Interoperabilität zwischen ASP.NET-Webdiensten und den Webdiensten von Windows Communication Foundation (WCF) kann erreicht werden, indem Sie sicherstellen, dass implementierte Dienste, die beide Technologien verwenden, der Spezifikation für WS-I Basic Profile 1.1 entsprechen.ASP.NET-Webdienste, die die WS-I Basic Profile 1.1-Spezifikation erfüllen, können mit WCF-Clients über die von WCF bereitgestellte Bindung (BasicHttpBinding) interagieren.

Verwenden Sie wie im folgenden Beispielcode gezeigt die in ASP.NET 2.0 gebotene Möglichkeit, das WebService-Attribut und das WebMethodAttribute-Attribut zu einer Schnittstelle anstatt zu einer Klasse hinzuzufügen und zum Implementieren der Schnittstelle eine Klasse zu schreiben.

[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.Gehen Sie wie folgt vor, wenn ein Datentyp für die Verwendung mit ASP.NET-Webdiensten als Vorbereitung für eine zukünftige Arbeit mit WCF definiert wird:

  • 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 verwendeten Typen können von WCF 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.Diese werden von WCF-Clients nicht unterstützt.Falls ein Dienst geschützt werden muss, verwenden Sie die von WCF bereitgestellten Funktionen, da diese Optionen robuster 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 Stammdatei Web.config installiert, sodass jede ASP.NET-Anwendung WCF unterstützte.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

Vorgehensweise: Konfigurieren eines WCF-Diensts für die Zusammenarbeit mit ASP.NET Webdienstclients