Configurazione del client

La configurazione client di Windows Communication Foundation (WCF) può essere utilizzata per specificare l'indirizzo, l'associazione, il comportamento e il contratto, ovvero le proprietà di base dell'endpoint client utilizzate dai client per connettersi agli endpoint di servizio. L'elemento <client> presenta un elemento <endpoint> i cui attributi consentono di configurare le proprietà di base dell'endpoint. Questi attributi sono descritti nella sezione "Configurazione degli endpoint" di questo argomento.

L'elemento <endpoint> contiene inoltre un elemento <metadata> utilizzato per specificare le impostazioni relative all'importazione e all'esportazione di metadati, un elemento <headers> che contiene un insieme di intestazioni di indirizzo personalizzate e un elemento <identity> che consente all'endpoint di essere autenticato dagli altri endpoint con cui scambia messaggi. Gli elementi <headers> e <identity> sono parte dell'indirizzo EndpointAddress e sono descritti nell'argomento Indirizzi endpoint. I collegamenti agli argomenti che spiegano l'utilizzo delle estensioni di metadati sono riportati nella sottosezione "Configurazione di metadati" di questo argomento.

Configurazione degli endpoint

La configurazione client è progettata per consentire al client di specificare uno o più endpoint e di definire per ognuno di essi nome, indirizzo e contratto. Ognuno di questi elementi di endpoint fa riferimento agli elementi <bindings> e <behaviors> della configurazione client da utilizzare per configurare tale endpoint. Il file di configurazione client deve essere denominato con il nome previsto dal runtime di WCF, ovvero "App.config". Nell'esempio seguente viene illustrato un file di configurazione client.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
        <client>
          <endpoint
            name="endpoint1"
            address="https://localhost/ServiceModelSamples/service.svc"
            binding="wsHttpBinding"
            bindingConfiguration="WSHttpBinding_IHello"
            behaviorConfiguration="IHello_Behavior"
            contract="IHello" >

            <metadata>
              <wsdlImporters>
                <extension
                  type="Microsoft.ServiceModel.Samples.WsdlDocumentationImporter, WsdlDocumentation"/>
              </wsdlImporters>
            </metadata>

            <identity>
              <servicePrincipalName value="host/localhost" />
            </identity>
          </endpoint>
// Add another endpoint by adding another <endpoint> element.
          <endpoint
            name="endpoint2">
           //Configure another endpoint here.
          </endpoint>
        </client>

//The bindings section references by the bindingConfiguration endpoint attribute.
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_IHello" 
                 bypassProxyOnLocal="false" 
                 hostNameComparisonMode="StrongWildcard">
          <readerQuotas maxDepth="32"/>
          <reliableSession ordered="true" 
                           enabled="false" />
          <security mode="Message">
           //Security settings go here.
          </security>
        </binding>
        <binding name="Another Binding"
        //Configure this binding here.
        </binding>
          </wsHttpBinding>
        </bindings>

//The behavior section references by the behaviorConfiguration endpoint attribute.
        <behaviors>
            <endpointBehaviors>
                <behavior name=" IHello_Behavior ">
                    <clientVia />
                </behavior>
            </endpointBehaviors>
        </behaviors>

    </system.serviceModel>
</configuration>

L'attributo name facoltativo identifica in modo univoco un endpoint per un dato contratto. In particolare, tale attributo viene utilizzato dal costruttore ChannelFactory o dal costruttore ClientBase per specificare l'endpoint della configurazione client da configurare e da caricare quando viene creato un canale per il servizio. È possibile scegliere come nome di configurazione di endpoint il carattere jolly "*". In questo caso, il metodo ApplyConfiguration carica qualsiasi configurazione di endpoint contenuta nel file, purché ne sia presente soltanto una. Se sono presenti più configurazioni di endpoint, viene generata un'eccezione. Se questo attributo viene omesso, l'endpoint corrispondente viene utilizzato come endpoint predefinito associato al tipo di contratto specificato. Il valore predefinito dell'attributo name è una stringa vuota a cui si fa riferimento con le stesse modalità utilizzate per qualsiasi altro nome.

Affinché possa essere individuato e identificato, ogni endpoint deve presentare un indirizzo. L'attributo address può essere utilizzato per specificare l'URL che indica la posizione dell'endpoint. Tuttavia, l'indirizzo di un endpoint di servizio può anche essere specificato in codice creando un Uniform Resource Identifier (URI) e aggiungendo tale identificatore all'elemento ServiceHost tramite uno dei metodi AddServiceEndpoint. Per ulteriori informazioni, vedere Indirizzi endpoint. Come già menzionato nell'introduzione, gli elementi <headers> e <identity> sono parte dell'indirizzo EndpointAddress e pertanto sono anch'essi descritti nell'argomento Indirizzi endpoint.

L'attributo binding indica il tipo di associazione che l'endpoint prevede di utilizzare per la connessione a un servizio. Se si prevede di fare riferimento al tipo occorre registrare per quest'ultimo una sezione di configurazione. Nell'esempio precedente questa sezione corrisponde alla sezione <wsHttpBinding> in cui si indica che l'endpoint utilizza un'associazione WSHttpBinding. È tuttavia possibile che l'endpoint utilizzi più di un'associazione di un determinato tipo. Ogni associazione presenta un proprio elemento <binding> all'interno dell'elemento di tipo (dell'associazione). L'attributo bindingconfiguration viene utilizzato per distinguere le associazioni dello stesso tipo. Il valore di tale attributo fa riferimento all'attributo name dell'elemento <binding>. Per ulteriori informazioni su come configurare un'associazione client nella configurazione, vedere Procedura: specificare un'associazione client nella configurazione.

L'attributo behaviorConfiguration viene utilizzato per specificare l'elemento <behavior> dell'elemento <endpointBehaviors> che l'endpoint deve utilizzare. Il valore di tale attributo fa riferimento all'attributo name dell'elemento <behavior>. Per un esempio di come utilizzare la configurazione per specificare i comportamenti dei client, vedere Configurazione dei comportamenti client.

L'attributo contract specifica il contratto esposto dall'endpoint. Questo valore fa riferimento alla proprietà ConfigurationName dell'attributo ServiceContractAttribute. Il valore predefinito è il nome di tipo completo della classe che implementa il servizio.

Configurazione di metadati

L'elemento <metadata> viene utilizzato per specificare le impostazioni utilizzate per registrare le estensioni di importazione di metadati. Per ulteriori informazioni sull'estensione del sistema di metadati, vedere Estensione del sistema di metadati.

Vedere anche

Concetti

Endpoint: indirizzi, associazioni e contratti
Configurazione dei comportamenti client