Configurazione client
La configurazione client di WCF (Windows Communication Foundation) può essere usata per specificare l'indirizzo, il binding, il comportamento e il contratto, ovvero le proprietà di base dell'endpoint client usate 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.
L'elemento <endpoint> contiene inoltre un elemento <metadata> usato per specificare le impostazioni relative all'importazione e all'esportazione di metadati, un elemento <headers> che contiene una raccolta 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 di EndpointAddress e sono descritti nell'articolo Indirizzi. I collegamenti agli argomenti che spiegano l'uso 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 usare 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="http://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<TChannel> o dal costruttore ClientBase<TChannel> 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 altre informazioni, vedere Indirizzi. Come già menzionato nell'introduzione, gli elementi <headers> e <identity> sono parte di EndpointAddresse pertanto sono anch'essi descritti nell'argomento Indirizzi.
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 usa WSHttpBinding. È tuttavia possibile che l'endpoint utilizzi più di un'associazione di un determinato tipo. Ogni binding presenta un proprio elemento <binding> all'interno dell'elemento di tipo (del binding). L'attributo bindingconfiguration
viene utilizzato per distinguere le associazioni dello stesso tipo. Il relativo valore viene confrontato con l'attributo name
dell'elemento <binding>. Per altre informazioni su come configurare un binding client tramite la configurazione, vedere Procedura: Specificare un binding del client in configurazione.
L'attributo behaviorConfiguration
viene usato per specificare l'elemento <behavior> dell'elemento <endpointBehaviors> che l'endpoint deve usare. Il valore viene confrontato con l'attributo name
dell'elemento <behavior>. Per un esempio di come usare 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 usato per specificare le impostazioni usate per registrare le estensioni di importazione dei metadati. Per altre informazioni sull'estensione del sistema di metadati, vedere Estensione del sistema di metadati.