Configurazione dell'individuazione in un file di configurazione
Nell'individuazione vengono utilizzati quattro gruppi principali di impostazioni di configurazione. In questo argomento viene illustrato brevemente ciascuno di questi gruppi e vengono mostrati esempi per poterli configurare. Al termine di ogni sezione sarà disponibile un collegamento a documenti più dettagliati su ogni area.
Comportamento di configurazione
L'individuazione utilizza comportamenti del servizio e dell'endpoint. Il comportamento ServiceDiscoveryBehavior abilita l'individuazione per tutti gli endpoint di un servizio e consente di specificare endpoint annunci. Nell'esempio seguente viene illustrato come aggiungere l'elemento ServiceDiscoveryBehavior e specificare un endpoint annunci.
<behaviors>
<serviceBehaviors>
<behavior name="helloWorldServiceBehavior">
<serviceDiscovery>
<announcementEndpoints>
<endpoint kind="udpAnnouncementEndpoint"/>
</announcementEndpoints>
</serviceDiscovery>
</behavior>
</serviceBehaviors>
Dopo aver specificato il comportamento, farvi riferimento da un elemento <service>, come indicato nell'esempio seguente.
<system.serviceModel>
<services>
<service name="HelloWorldService" behaviorConfiguration="helloWorldServiceBehavior">
<!-- Application Endpoint -->
<endpoint address="endpoint0"
binding="basicHttpBinding"
contract="IHelloWorldService" />
<!-- Discovery Endpoints -->
<endpoint kind="udpDiscoveryEndpoint" />
</service>
</service>
Affinché un servizio sia individuabile, è necessario aggiungere anche un endpoint di individuazione. Nell'esempio precedente viene aggiunto un endpoint UdpDiscoveryEndpoint standard.
Se si aggiungono endpoint annunci, è necessario aggiungere anche un servizio listener di annunci all'elemento <services>, come indicato nell'esempio seguente.
<services>
<service name="HelloWorldService" behaviorConfiguration="helloWorldServiceBehavior">
<!-- Application Endpoint -->
<endpoint address="endpoint0"
binding="basicHttpBinding"
contract="IHelloWorldService" />
<!-- Discovery Endpoints -->
<endpoint kind="udpDiscoveryEndpoint" />
</service>
<!-- Announcement Listener Configuration -->
<service name="AnnouncementListener">
<endpoint kind="udpAnnouncementEndpoint" />
</service>
Il comportamento EndpointDiscoveryBehavior viene utilizzato per abilitare o disabilitare l'individuazione di un endpoint specifico. Nell'esempio seguente viene configurato un servizio con due endpoint dell'applicazione, uno con l'individuazione abilitata e uno con l'individuazione disabilitata. Per ogni endpoint viene aggiunto un comportamento EndpointDiscoveryBehavior.
<system.serviceModel>
<services>
<service name="HelloWorldService"
behaviorConfiguration="helloWorldServiceBehavior">
<!-- Application Endpoints -->
<endpoint address="endpoint0"
binding="basicHttpBinding"
contract="IHelloWorldService"
behaviorConfiguration="ep0Behavior" />
<endpoint address="endpoint1"
binding="basicHttpBinding"
contract="IHelloWorldService"
behaviorConfiguration="ep1Behavior" />
<!-- Discovery Endpoints -->
<endpoint kind="udpDiscoveryEndpoint" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="helloWorldServiceBehavior">
<serviceDiscovery />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="ep0Behavior">
<endpointDiscovery enabled="true"/>
</behavior>
<behavior name="ep1Behavior">
<endpointDiscovery enabled="false"/>
</behavior>
</endpointBehaviors>
</behaviors>
Il comportamento EndpointBehavior può essere inoltre utilizzato per aggiungere metadati personalizzati ai metadati dell'endpoint restituiti dal servizio. Nell'esempio seguente viene illustrato come effettuare questa operazione.
<behavior name="ep4Behavior">
<endpointDiscovery enabled="true">
<extensions>
<CustomMetadata>This is custom metadata.</CustomMetadata>
<d:Types xmlns:d="https://schemas.xmlsoap.org/ws/2005/04/discovery" xmlns:i="http://printer.example.org/2003/imaging">i:PrintBasic</d:Types>
<CustomMetadata netsted="true">
<NestedMetadata>This is a nested custom metadata.</NestedMetadata>
</CustomMetadata>
</extensions>
</endpointDiscovery>
</behavior>
Il comportamento EndpointDiscoveryBehavior può essere inoltre utilizzato per aggiungere ambiti e tipi utilizzati dai client per cercare servizi. Nell'esempio seguente viene descritto come effettuare questa operazione in un file di configurazione lato client.
<behavior name="ep2Behavior">
<endpointDiscovery enabled="true">
<scopes>
<add scope="https://www.microsoft.com/building42/floor1"/>
<add scope="ldap:///ou=engineeringo=examplecomc=us"/>
</scopes>
<types>
<add name="test" namespace="http://example.microsoft.com/" />
<add name="additionalContract" namespace="http://example.microsoft.com/" />
</types>
</endpointDiscovery>
</behavior>
Per ulteriori informazioni su ServiceDiscoveryBehavior e EndpointDiscoveryBehavior, vedere Panoramica di WCF Discovery.
Configurazione di elementi di associazione
La configurazione degli elementi di associazione è particolarmente interessante nel lato client. È possibile utilizzare la configurazione per specificare i criteri di ricerca utilizzata per individuare servizi da un'applicazione client WCF. Nell'esempio seguente viene creata un'associazione personalizzata con il canale DiscoveryClient e vengono specificati criteri di ricerca che includono un tipo e un ambito. Vengono inoltre specificati valori per le proprietà Duration e MaxResults.
<bindings>
<customBinding>
<!-- Binding Configuration for the Application Endpoint -->
<binding name="discoBindingConfiguration">
<discoveryClient>
<endpoint kind="discoveryEndpoint"
address="https://localhost:8000/ConfigTest/Discovery"
binding="customBinding"
bindingConfiguration="httpSoap12WSAddressing10"/>
<findCriteria duration="00:00:10" maxResults="2">
<types>
<add name="IHelloWorldService"/>
</types>
<scopes>
<add scope="https://www.microsoft.com/building42/floor1"/>
</scopes>
</findCriteria>
</discoveryClient>
<textMessageEncoding messageVersion="Soap11"/>
<httpTransport />
</binding>
È necessario che un endpoint client faccia riferimento a questa configurazione di associazione personalizzata.
<client>
<endpoint address="https://schemas.microsoft.com/discovery/dynamic"
binding="customBinding"
bindingConfiguration="discoBindingConfiguration"
contract="IHelloWorldService" />
</client>
Per ulteriori informazioni su criteri di ricerca, vedere Ricerca di individuazione e FindCriteria. Per ulteriori informazioni su elementi di associazione e individuazione, vedere, Panoramica di WCF Discovery
Configurazione di endpoint standard
Gli endpoint standard sono endpoint con valori predefiniti per una o più proprietà (indirizzo, associazione o contratto) o uno o più valori di proprietà non modificabili. .NET 4 viene fornito con 3 endpoint standard relativi all'individuazione: UdpDiscoveryEndpoint, UpdAnnouncementEndpoint e DynamicEndpoint. UdpDiscoveryEndpoint è un endpoint standard preconfigurato per le operazioni di individuazione su un'associazione multicast UDP. UdpAnnouncementEndpoint è un endpoint standard preconfigurato per l'invio di messaggi di annuncio su un'associazione multicast UDP. DynamicEnpoint è un endpoint standard che utilizza l'individuazione per cercare l'indirizzo endpoint di un servizio individuato in modo dinamico al runtime. Le associazioni standard vengono specificate con un elemento <endpoint> contenente gli attributi kind che specificano il tipo di endpoint standard da aggiungere. Nell'esempio seguente viene illustrato come aggiungere un elemento UdpDiscoveryEndpoint e un elemento UpdAnnouncementEndpoint.
<services>
<service name="HelloWorldService">
<!-- ... -->
<endpoint kind="udpDiscoveryEndpoint" />
</service>
<service name="AnnouncementListener">
<endpoint kind="udpAnnouncementEndpoint" />
</service>
</services>
Gli endpoint standard vengono configurati in un elemento <standardEndpoints>. Nell'esempio seguente viene illustrato come configurare l'elemento UdpDiscoveryEndpoint e l'elemento UdpAnnouncementEndpoint.
<standardEndpoints>
<udpAnnouncementEndpoint>
<standardEndpoint
name="udpAnnouncementEndpointSettings"
multicastAddress="soap.udp://239.255.255.250:3703"
maxAnnouncementDelay="00:00:00.800">
<transportSettings
duplicateMessageHistoryLength="1028"
maxPendingMessageCount="10"
maxMulticastRetransmitCount="3"
maxUnicastRetransmitCount="2"
socketReceiveBufferSize="131072"
timeToLive="2" />
</standardEndpoint>
</udpAnnouncementEndpoint>
<udpDiscoveryEndpoint>
<standardEndpoint
name="udpDiscoveryEndpointSettings"
multicastAddress="soap.udp://239.255.255.252:3704"
maxResponseDelay="00:00:00.800">
<transportSettings
duplicateMessageHistoryLength="2048"
maxPendingMessageCount="5"
maxReceivedMessageSize="8192"
maxBufferPoolSize="262144"/>
</standardEndpoint>
</udpDiscoveryEndpoint>
Dopo aver aggiunto la configurazione dell'endpoint standard, farvi riferimento nell'elemento <endpoint> per ogni endpoint, come indicato nell'esempio seguente.
<services>
<service name="HelloWorldService">
<!-- ... -->
<endpoint kind="udpDiscoveryEndpoint" endpointConfiguration="udpDiscoveryEndpointSettings"/>
</service>
<service name="AnnouncementListener">
<endpoint kind="udpAnnouncementEndpoint" endpointConfiguration="udpAnnouncementEndpointSettings" >
</service>
</services>
A differenza degli altri endpoint standard utilizzati nell'individuazione, vengono specificati un'associazione e un contratto per DynamicEndpoint. Nell'esempio seguente viene illustrato come aggiungere e configurare un elemento DynamicEndpoint.
<system.serviceModel>
<client>
<endpoint kind="dynamicEndpoint" binding="basicHttpBinding" contract="IHelloWorldService" endpointConfiguration="dynamicEndpointConfiguration" />
</client>
<standardEndpoints>
<dynamicEndpoint>
<standardEndpoint name="dynamicEndpointConfiguration">
<discoveryClientSettings>
<findCriteria scopeMatchBy="https://schemas.microsoft.com/ws/2008/06/discovery/rfc" duration="00:00:10" maxResults="2">
<types>
<add name="IHelloWorldService"/>
</types>
<scopes>
<add scope="https://www.microsoft.com/building42/floor1"/>
</scopes>
<extensions>
<CustomMetadata>This is custom metadata.</CustomMetadata>
</extensions>
</findCriteria>
</discoveryClientSettings>
</standardEndpoint>
</dynamicEndpoint>
</standardEndpoints>
</system.ServiceModel>
Per ulteriori informazioni su endpoint standard, vedere Endpoint standard