Interopérabilité avec les services Web ASP.NET

L’interopérabilité entre les services web ASP.NET et les services web Windows Communication Foundation (WCF) peut être accomplie en s’assurant que les services implémentés à l’aide des deux technologies se conforment à la spécification WS-I Basic Profile 1.1. Les services web ASP.NET qui se conforment à WS-I Basic Profile 1.1 sont interopérables avec les clients WCF grâce à l’utilisation de la liaison fournie par le système WCF, BasicHttpBinding.

Utilisez l’option ASP.NET 2.0 d’ajout des attributs WebService et WebMethodAttribute à une interface plutôt qu’à une classe et d’écriture d’une classe pour implémenter l’interface, comme le montre l’exemple de code suivant.

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

L'utilisation de cette option est recommandée, car l'interface avec l'attribut WebService constitue un contrat pour les opérations exécutées par le service qui peut être réutilisé avec différentes classes, qui peuvent implémenter ce même contrat de différentes façons.

Évitez d'utiliser l'attribut SoapDocumentServiceAttribute pour router des messages vers des méthodes basées sur le nom qualifié complet de l'élément de corps du message SOAP plutôt que l'en-tête HTTP SOAPAction. WCF utilise l’en-tête HTTP SOAPAction pour router les messages.

Le XML dans lequel XmlSerializer sérialise un type par défaut est sémantiquement identique au XML dans lequel DataContractSerializer sérialise un type, à condition que l'espace de noms du XML soit défini explicitement. Lorsque vous définissez un type de données pour une utilisation avec les services web ASP.NET avant d’adopter WCF, procédez comme suit :

  • Définissez le type à l'aide des classes .NET Framework plutôt que XML Schema.

  • Ajoutez uniquement SerializableAttribute et XmlRootAttribute à la classe, en utilisant ce dernier pour définir explicitement l'espace de noms du type. N'ajoutez pas d'attribut supplémentaire à partir de l'espace de noms System.Xml.Serialization pour contrôler la manière dont la classe .NET Framework sera traduite dans XML.

  • En adoptant cette approche, vous devez être en mesure de créer ultérieurement les classes .NET dans des contrats de données avec l'ajout de DataContractAttribute et DataMemberAttribute sans modifier de manière significative le XML dans lequel les classes sont sérialisées pour la transmission. Les types utilisés dans les messages par les services web ASP.NET peuvent être traités comme des contrats de données par les applications WCF, ce qui produit, entre autres avantages, des applications WCF plus performantes.

Évitez d'utiliser les options d'authentification fournies par des services IIS (Internet Information Services). Les clients WCF ne les prennent pas en charge. Si un service doit être sécurisé, utilisez les options fournies par WCF, car ces options sont fiables et sont basées sur des protocoles standard.

Impact sur les performances causé par le chargement de ServiceModel HttpModule

Dans .NET Framework 3.0, le HttpModule WCF a été installé dans le fichier Web.config racine pour que chaque application ASP.NET soit compatible WCF. Cela peut affecter les performances, vous pouvez donc supprimer ServiceModel pour le fichier Web.config comme illustré dans l'exemple suivant.

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

Voir aussi