Configurazione semplificataSimplified Configuration

Configurazione dei servizi Windows Communication Foundation (WCF) può essere un'attività complessa.Configuring Windows Communication Foundation (WCF) services can be a complex task. Esistono diverse opzioni e non è sempre semplice determinare quali impostazioni sono necessarie.There are many different options and it is not always easy to determine what settings are required. Mentre i file di configurazione aumentano la flessibilità dei servizi WCF, sono anche l'origine di molti problemi difficili da individuare.While configuration files increase the flexibility of WCF services, they also are the source for many hard to find problems. In .NET Framework 4.6.1.NET Framework 4.6.1 questi problemi vengono risolti e viene offerto un modo per ridurre la dimensione e la complessità della configurazione dei servizi..NET Framework 4.6.1.NET Framework 4.6.1 addresses these problems and provides a way to reduce the size and complexity of service configuration.

Configurazione semplificataSimplified Configuration

Nei file di configurazione del servizio WCF, il <system.serviceModel> della sezione sono un <service> elemento per ogni servizio ospitato.In WCF service configuration files, the <system.serviceModel> section contains a <service> element for each service hosted. 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.The <service> element contains a collection of <endpoint> elements that specify the endpoints exposed for each service and optionally a set of service behaviors. 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.The <endpoint> elements specify the address, binding, and contract exposed by the endpoint, and optionally binding configuration and endpoint behaviors. La sezione <system.serviceModel> contiene anche un elemento <behaviors> che consente di specificare i comportamenti del servizio o dell'endpoint.The <system.serviceModel> section also contains a <behaviors> element that allows you to specify service or endpoint behaviors. L'esempio seguente mostra la sezione <system.serviceModel> di un file di configurazione.The following example shows the <system.serviceModel> section of a configuration file.

<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.6.1.NET Framework 4.6.1 facilita la configurazione di un servizio WCF semplice rimuovendo il requisito per il <service> elemento. makes configuring a WCF service easier by removing the requirement for the <service> element. Se non si aggiunge una sezione <service> o non si aggiungono endpoint in una sezione <service> e il servizio non definisce endpoint a livello di codice, viene automaticamente aggiunto al servizio un set di endpoint predefiniti, uno per ogni indirizzo di base del servizio e per ogni contratto implementato dal servizioIf you do not add a <service> section or add any endpoints in a <service> section and your service does not programmatically define any endpoints, then a set of default endpoints are automatically added to your service, one for each service base address and for each contract implemented by your service. 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.In each of these endpoints, the endpoint address corresponds to the base address, the binding is determined by the base address scheme and the contract is the one implemented by your service. Se non è necessario specificare endpoint o comportamenti del servizio oppure apportare modifiche alle impostazioni dell'associazione, non è necessario specificare un file di configurazione dei servizi.If you do not need to specify any endpoints or service behaviors or make any binding setting changes, you do not need to specify a service configuration file at all. 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 usa ogni trasporto.If a service implements two contracts and the host enables both HTTP and TCP transports the service host creates four default endpoints, one for each contract using each transport. Per creare endpoint predefiniti, l'host del servizio deve sapere quali associazioni usare.To create default endpoints the service host must know what bindings to use. Queste impostazioni vengono specificate in una sezione <protocolMappings> all'interno della sezione <system.serviceModel>.These settings are specified in a <protocolMappings> section within the <system.serviceModel> section. La sezione <protocolMappings> contiene un elenco di schemi del protocollo di trasporto mappati ai tipi di associazione.The <protocolMappings> section contains a list of transport protocol schemes mapped to binding types. L'host del servizio usa gli indirizzi di base passati per determinare quale associazione usare.The service host uses the base addresses passed to it to determine which binding to use. L'esempio seguente usa l'elemento <protocolMappings>.The following example uses the <protocolMappings> element.

Avviso

La modifica di elementi predefiniti della configurazione, quali associazioni o comportamenti, potrebbe influire sugli eventuali servizi definiti nei livelli inferiori della gerarchia di configurazione che usino tali elementi.Changing default configuration elements, such as bindings or behaviors, might affect services defined in lower levels of the configuration hierarchy, since they might be using these default bindings and behaviors. Pertanto, quando ci si accinge a modificare le associazioni e i comportamenti predefiniti, tenere sempre presente che tali modifiche potrebbero avere effetto su altri servizi nella gerarchia.Thus, whoever changes default bindings and behaviors needs to be aware that these changes might affect other services in the hierarchy.

Nota

I servizi ospitati in Internet Information Services (IIS) o nel servizio Attivazione processo Windows (WAS, Windows Process Activation Service) usano la directory virtuale come indirizzo di base.Services hosted under Internet Information Services (IIS) or Windows Process Activation Service (WAS) use the virtual directory as their base address.

<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" usa BasicHttpBinding.In the previous example, an endpoint with a base address that starts with the "http" scheme uses the BasicHttpBinding. Un endpoint con un indirizzo di base che inizia con lo schema "net.tcp" usa NetTcpBinding.An endpoint with a base address that starts with the "net.tcp" scheme uses the NetTcpBinding. È possibile eseguire l'override delle impostazioni in un file App.config locale o un file Web.config.You can override settings in a local App.config or Web.config file.

Ogni elemento all'interno della sezione <protocolMappings> deve specificare uno schema e un'associazione.Each element within the <protocolMappings> section must specify a scheme and a binding. Facoltativamente, è possibile specificare un attributo bindingConfiguration che indica una configurazione dell'associazione all'interno della sezione <bindings> del file di configurazione.Optionally it can specify a bindingConfiguration attribute that specifies a binding configuration within the <bindings> section of the configuration file. Se non viene specificato alcun elemento bindingConfiguration, viene usata la configurazione di associazione anonima del tipo di associazione appropriata.If no bindingConfiguration is specified, the anonymous binding configuration of the appropriate binding type is used.

I comportamenti del servizio vengono configurati per gli endpoint predefiniti tramite sezioni <behavior> anonime all'interno delle sezioni <serviceBehaviors>.Service behaviors are configured for the default endpoints by using anonymous <behavior> sections within <serviceBehaviors> sections. Per configurare i comportamenti del servizio viene usato qualsiasi elemento <behavior> sprovvisto di nome all'interno di <serviceBehaviors>.Any unnamed <behavior> elements within <serviceBehaviors> are used to configure service behaviors. Il file di configurazione seguente abilita ad esempio la pubblicazione dei metadati del servizio per tutti i servizi all'interno del host.For example, the following configuration file enables service metadata publishing for all services within the 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 le sezioni <behavior> all'interno delle sezioni <serviceBehaviors>.Endpoint behaviors are configured by using anonymous <behavior> sections within <serviceBehaviors> sections.

L'esempio seguente è costituito da un file di configurazione equivalente a quello indicato all'inizio di questo argomento che usa il modello di configurazione semplificato.The following example is a configuration file equivalent to the one at the beginning of this topic that uses the simplified configuration model.

<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>  

Importante

Questa funzionalità si riferisce solo alla configurazione del servizio WCF, non alla configurazione client.This feature relates only to WCF service configuration, not client configuration. Nella maggior parte dei casi, la configurazione client WCF viene generata da uno strumento come svcutil.exe o aggiungendo un riferimento al servizio da Visual Studio.Most times, WCF client configuration will be generated by a tool such as svcutil.exe or adding a service reference from Visual Studio. Se si configura manualmente un client WCF, è necessario aggiungere un <client > elemento per la configurazione e specificare tutti gli endpoint che si desidera chiamare.If you are manually configuring a WCF client you will need to add a <client> element to the configuration and specify any endpoints you wish to call.

Vedere ancheSee Also

Configurazione dei servizi tramite file di configurazioneConfiguring Services Using Configuration Files
Configurazione delle associazioni per i serviziConfiguring Bindings for Services
Configurazione di associazioni fornite dal sistemaConfiguring System-Provided Bindings
Configurazione dei serviziConfiguring Services
Configurazione di applicazioni Windows Communication FoundationConfiguring Windows Communication Foundation Applications
Configurazione dei servizi WCF nel codiceConfiguring WCF Services in Code