Configurazione semplificata
La configurazione di servizi Windows Communication Foundation (WCF) può risultare un'attività complessa. Esistono diverse opzioni e non è sempre semplice determinare quali impostazioni sono necessarie. Se da una parte i file di configurazione aumentano la flessibilità dei servizi WCF, dall'altra rappresentano anche l'origine di molti problemi difficili da individuare. .NET Framework versione 4 gestisce questi problemi e fornisce agli utenti un modo per ridurre le dimensioni e la complessità della configurazione del servizio.
Configurazione semplificata
Nei file di configurazione di WCF, la sezione <system.serviceModel> contiene un elemento <service> per ogni servizio ospitato. L'elemento <service> contiene una raccolta di elementi <endpoint> che specificano gli endpoint esposti per ogni servizio e facoltativamente un set dei comportamenti del servizio. Gli elementi <endpoint> specificano l'indirizzo, l'associazione e il contratto esposti dall'endpoint e facoltativamente la configurazione di associazione e i comportamenti dell'endpoint. La sezione <system.serviceModel> contiene inoltre un elemento <behaviors> che consente di specificare comportamenti del servizio o dell'endpoint. Nell'esempio riportato di seguito viene illustrata la sezione <system.serviceModel> di un file di configurazione.
system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name=”MyServiceBehavior”>
<serviceMetadata httpGetEnabled=”true”>
<serviceDebug includeExceptionDetailInFaults=”false”>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name=MyBindingConfig”
maxBufferSize=”100”
maxReceiveBufferSize=”100” />
</basicHttpBinding>
</bindings> <services>
<service behaviorConfiguration=”MyServiceBehavior”
name=”MyService”>
<endpoint address=””
binding=”basicHttpBinding”
contract=”ICalculator”
bindingConfiguration=”MyBindingConfig” />
<endpoint address=”mex”
binding=”mexHttpBinding”
contract=”IMetadataExchange”/>
</service>
</services>
</system.serviceModel>
.NET Framework 4 agevola la configurazione di un servizio WCF rimuovendo il requisito per l'elemento <service>. Se non si aggiungono endpoint nella sezione <service> (se presente) e il servizio non definisce endpoint a livello di codice, viene automaticamente aggiunto al servizio un set di endpoint, uno per ogni indirizzo di base del servizio e per ogni contratto implementato dal servizio. In ognuno di questi endpoint l'indirizzo endpoint corrisponde all'indirizzo di base, l'associazione viene determinata dallo schema dell'indirizzo di base e il contratto corrisponde a quell'implementato dal servizio. Se non è necessario specificare endpoint o comportamenti del servizio oppure apportare modifiche alle impostazioni dell'associazione, non è necessario specificare un file di configurazione. Se un servizio implementa due contratti e l'host abilita sia il trasporto HTTP sia quello TCP, l'host del servizio crea quattro endpoint predefiniti, uno per ogni contratto che utilizza ogni trasporto. Per creare endpoint predefiniti, l'host del servizio deve sapere quali associazioni utilizzare. Queste impostazioni vengono specificate in una sezione <protocolMappings> all'interno della sezione <system.serviceModel>. La sezione <protocolMappings> contiene un elenco di schemi del protocollo di trasporto mappati ai tipi di associazione. L'host del servizio utilizza gli indirizzi di base passati per determinare quale associazione utilizzare. Nell'esempio seguente viene utilizzato l'elemento <protocolMappings>.
Nota: |
---|
I servizi ospitati in Internet Information Services (IIS) o nel servizio Attivazione processo Windows (WAS, Windows Process Activation Service) utilizzano la directory virtuale come indirizzo di base. |
<protocolMapping>
<add scheme=”http” binding=”basicHttpBinding” bindingConfiguration=”MyBindingConfiguration”/>
<add scheme=”net.tcp” binding=”netTcpBinding”/>
<add scheme=”net.pipe” binding=”netNamedPipeBinding”/>
<add scheme=”net.msmq” binding=”netMSMQBinding”/>
</protocolMapping>
Nell'esempio precedente un endpoint con un indirizzo di base che inizia con lo schema "http" utilizza BasicHttpBinding. Un endpoint con un indirizzo di base che inizia con lo schema "net.tcp" utilizza NetTcpBinding. È possibile eseguire l'override delle impostazioni in un file App.config locale o un file Web.config.
Ogni elemento all'interno della sezione <protocolMappings> deve specificare uno schema e un'associazione. Facoltativamente, è possibile specificare un attributo bindingConfiguration che indica una configurazione dell'associazione all'interno della sezione <bindings> del file di configurazione. Se non viene specificato alcun elemento bindingConfiguration, viene utilizzata la configurazione di associazione anonima del tipo di associazione appropriata.
I comportamenti del servizio vengono configurati per gli endpoint predefiniti tramite sezioni <behavior> anonime all'interno di sezioni <serviceBehaviors>. Per configurare i comportamenti del servizio viene utilizzato qualsiasi elemento <behavior> sprovvisto di nome all'interno di <serviceBehaviors>. Il file di configurazione seguente abilita ad esempio la pubblicazione dei metadati del servizio per tutti i servizi all'interno del host.
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True"/>
</behavior>
</serviceBehaviors>
</behaviors> <!-- No <service> tag is necessary. Default endpoints are added to the service -->
<!-- The service behavior with name="" is picked up by the service -->
</system.serviceModel>
I comportamenti dell'endpoint vengono configurati tramite sezioni <behavior> anonime all'interno di sezioni <serviceBehaviors>.
L'esempio seguente è costituito da un file di configurazione equivalente a quello indicato all'inizio di questo argomento che utilizza il modello di configurazione semplificato.
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults=”false”/>
</behavior>
</serviceBehaviors>
</behaviors> <bindings>
<basicHttpBinding>
<binding maxBufferSize=”100”
maxReceiveBufferSize=”100” />
</basicHttpBinding>
</bindings> <!-- No <service> tag is necessary. Default endpoints will be added to the service -->
<!-- The service behavior with name="" will be picked up by the service -->
<protocolMapping>
<add scheme=”http” binding=”basicHttpBinding” / </protocolMapping>
</system.serviceModel>
Vedere anche
Concetti
Configurazione dei servizi tramite file di configurazione
Configurazione di associazioni per i servizi Windows Communication Foundation
Configurazione di associazioni fornite dal sistema
Altre risorse
Configurazione dei servizi
Configuring Windows Communication Foundation Applications