Interoperabilità con i servizi Web ASP.NET

Per garantire l'interoperabilità tra i servizi Web ASP.NET e i servizi Web Windows Communication Foundation (WCF) è possibile implementare i servizi che utilizzano entrambe le tecnologie in modo che siano conformi alla specifica WS-I Basic Profile 1.1. Per garantire l'interoperabilità fra i servizi Web ASP.NET conformi alla specifica WS-I Basic Profile 1.1 e i client WCF è possibile utilizzare un'associazione di sistema fornita da WCF, ovvero BasicHttpBinding.

Utilizzare l'opzione di ASP.NET 2.0 che consente di aggiungere gli attributi WebService e WebMethodAttribute a un'interfaccia anziché a una classe e di scrivere una classe per implementare l'interfaccia, come mostrato nell'esempio di codice seguente.

[WebService]
public interface IEcho
{
    [WebMethod]
    string Echo(string input);
}

public class Service : IEcho
{

   public string Echo(string input)
   {
        return input;
    }
}

È preferibile utilizzare questa opzione. Infatti, l'interfaccia avente l'attributo WebService costituisce un contratto per le operazioni eseguite dal servizio che può essere riutilizzato con varie classi in grado di implementare tale contratto in modi diversi.

Evitare di utilizzare l'attributo SoapDocumentServiceAttribute per instradare i messaggi a metodi basati sul nome completo dell'elemento del corpo del messaggio SOAP anziché sull'intestazione HTTP dell'elemento SOAPAction. WCF utilizza l'intestazione HTTP dell'elemento SOAPAction per instradare i messaggi.

Il codice XML in cui l'oggetto XmlSerializer serializza un tipo è per impostazione predefinita semanticamente identico al codice XML in cui l'oggetto DataContractSerializer serializza un tipo, purché lo spazio dei nomi del codice XML sia stato definito in modo esplicito. Quando si definisce un tipo di dati da utilizzare in servizi Web ASP.NET e si prevede di utilizzare WCF, eseguire le operazioni seguenti:

  • Definire il tipo utilizzando classi .NET Framework anziché lo schema XML.
  • Aggiungere solo gli attributi SerializableAttribute e XmlRootAttribute alla classe, utilizzando quest'ultimo per definire in modo esplicito lo spazio dei nomi del tipo. Evitare di aggiungere attributi aggiuntivi dello spazio dei nomi System.Xml.Serialization per controllare la modalità di conversione della classe .NET Framework in XML.
  • Tramite questo approccio è possibile convertire successivamente le classi .NET in contratti di dati aggiungendo gli attributi DataContractAttribute e DataMemberAttribute senza modificare in modo significativo il codice XML nel quale le classi vengono serializzate per la trasmissione. I tipi utilizzati nei messaggi dai servizi Web ASP.NET possono essere elaborati come contratti di dati dalle applicazioni WCF. Ciò offre diversi vantaggi, fra cui il miglioramento delle prestazioni delle applicazioni WCF.

Evitare di utilizzare le opzioni di autenticazione fornite in Internet Information Services (IIS), poiché i client WCF non le supportano. Se occorre proteggere un servizio, utilizzare le opzioni fornite in WCF. Queste opzioni sono infatti affidabili e sono basate su protocolli standard.

Impatto sulle prestazioni causato dal caricamento di ServiceModel HttpModule

In .NET Framework 3.0, WCF HttpModule è stato installato nel file Web.config di primo livello in modo tale che qualsiasi applicazione ASP.NET supporti WCF. Ciò può avere effetti negativi sulle prestazioni, pertanto è possibile eliminare ServiceModel per il file Web.config come illustrato nell'esempio seguente.

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

Vedere anche

Attività

Procedura: configurare un servizio WCF che interagisca con client di servizi Web ASP.NET