Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
L'esempio di configurazione illustra l'uso di un file di configurazione per rendere individuabile un servizio.
Configurazione del servizio
Il file di configurazione in questo esempio illustra due funzionalità:
Rendere individuabile il servizio tramite uno standard UdpDiscoveryEndpoint.
Modifica delle informazioni correlate all'individuazione per l'endpoint dell'applicazione del servizio e modifica di alcune delle impostazioni correlate all'individuazione nell'endpoint standard.
Per abilitare l'individuazione, è necessario apportare alcune modifiche nel file di configurazione dell'applicazione per il servizio:
È necessario aggiungere un endpoint di individuazione all'elemento
<service>. Si tratta di un endpoint standard UdpDiscoveryEndpoint . Si tratta di un endpoint di sistema che il runtime associa al servizio di scoperta. Il servizio di individuazione è in ascolto dei messaggi in questo endpoint.Un comportamento
<serviceDiscovery>è stato aggiunto alla sezione<serviceBehaviors>. In questo modo il servizio può essere individuato in fase di esecuzione e usa l'endpoint di individuazione indicato in precedenza per ascoltare i messaggi di individuazioneProbeeResolve. Con queste due aggiunte, il servizio è individuabile nell'endpoint di individuazione specificato.
Il frammento di configurazione seguente mostra un servizio con un endpoint dell'applicazione e un endpoint di individuazione definito:
<services>
<service name="Microsoft.Samples.Discovery.CalculatorService"
behaviorConfiguration="calculatorServiceBehavior">
<endpoint address=""
binding="wsHttpBinding"
contract="Microsoft.Samples.Discovery.ICalculatorService"
behaviorConfiguration="endpointBehaviorConfiguration" />
<endpoint name="udpDiscovery"
kind="udpDiscoveryEndpoint"
endpointConfiguration="adhocDiscoveryEndpointConfiguration"/> </service>
</services>
Per sfruttare i vantaggi degli annunci, è necessario aggiungere un endpoint di annuncio. A tale scopo, modificare il file di configurazione come illustrato nel codice seguente.
<serviceDiscovery>
<announcementEndpoints>
<endpoint kind="udpAnnouncementEndpoint"/>
</announcementEndpoints>
</serviceDiscovery>
L'aggiunta di un endpoint di annuncio al comportamento del servizio di individuazione crea un client di annuncio predefinito per il servizio. Ciò garantisce che il servizio invierà un annuncio online e offline quando il servizio viene aperto e chiuso rispettivamente.
Questo file di configurazione va oltre questi semplici passaggi modificando comportamenti aggiuntivi. È possibile controllare le informazioni correlate all'individuazione usando endpoint specifici. Ovvero, un utente può controllare se un endpoint può essere individuato e l'utente può anche contrassegnare tale endpoint con Scopes e metadati XML personalizzati. A tale scopo, l'utente deve aggiungere una behaviorConfiguration proprietà all'endpoint dell'applicazione. In questo caso, la proprietà seguente viene aggiunta all'endpoint dell'applicazione.
behaviorConfiguration="endpointBehaviorConfiguration"
Ora, tramite l'elemento di configurazione del comportamento, è possibile controllare gli attributi correlati all'individuazione. In questo caso, due ambiti vengono aggiunti all'endpoint dell'applicazione.
<endpointBehaviors>
<behavior name="endpointBehaviorConfiguration">
<endpointDiscovery>
<scopes>
<add scope="http://www.example.com/calculator"/>
<add scope="ldap:///ou=engineering,o=examplecom,c=us"/>
</scopes>
</endpointDiscovery>
</behavior>
</endpointBehaviors>
Per ulteriori informazioni sugli ambiti, vedere Discovery Find e FindCriteria.
È anche possibile controllare dettagli specifici dell'endpoint di individuazione. Questa operazione viene eseguita tramite StandardEndpointsSection. In questo esempio viene modificata la versione del protocollo usato, nonché l'aggiunta di un maxResponseDelay attributo come illustrato nell'esempio di codice seguente.
<standardEndpoints>
<udpDiscoveryEndpoint>
<standardEndpoint name="adhocDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11" maxResponseDelay="00:00:00.600" />
</udpDiscoveryEndpoint>
</standardEndpoints>
Di seguito è riportato il file di configurazione completo usato in questo esempio:
<configuration>
<system.serviceModel>
<services>
<service name="Microsoft.Samples.Discovery.CalculatorService"
behaviorConfiguration="calculatorServiceBehavior">
<endpoint address=""
binding="wsHttpBinding"
contract="Microsoft.Samples.Discovery.ICalculatorService"
behaviorConfiguration="endpointBehaviorConfiguration" />
<!-- Define the discovery endpoint -->
<endpoint name="udpDiscovery" kind="udpDiscoveryEndpoint" endpointConfiguration="adhocDiscoveryEndpointConfiguration"/> </service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="calculatorServiceBehavior">
<!-- Add an announcement endpoint -->
<serviceDiscovery>
<announcementEndpoints>
<endpoint kind="udpAnnouncementEndpoint"/>
</announcementEndpoints>
</serviceDiscovery>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="endpointBehaviorConfiguration">
<!-- Add scopes used to identify the service -->
<endpointDiscovery>
<scopes>
<add scope="http://www.example.com/calculator"/>
<add scope="ldap:///ou=engineering,o=examplecom,c=us"/>
</scopes>
</endpointDiscovery>
</behavior>
</endpointBehaviors>
</behaviors>
<standardEndpoints>
<udpDiscoveryEndpoint>
<!-- Configure the UDP discovery endpoint -->
<standardEndpoint name="adhocDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11" maxResponseDelay="00:00:00.600" />
</udpDiscoveryEndpoint>
</standardEndpoints>
</system.serviceModel>
</configuration>
Configurazione client
**
Nel file di configurazione dell'applicazione per il client viene impiegato un standardEndpoint di tipo dynamicEndpoint per utilizzare la scoperta, come illustrato nel frammento di configurazione seguente.
<client>
<!-- Create an endpoint, make kind="dynamicEndpoint" and use the endpointConfiguration to change settings of DynamicEndpoint -->
<endpoint name="calculatorEndpoint"
binding="wsHttpBinding"
contract="ICalculatorService"
kind ="dynamicEndpoint"
endpointConfiguration="dynamicEndpointConfiguration">
</endpoint>
</client>
Quando un client usa un dynamicEndpoint, il runtime esegue automaticamente l'individuazione. Durante l'individuazione vengono usate varie impostazioni, ad esempio quelle definite nella discoveryClientSettings sezione , che specifica il tipo di endpoint di individuazione da usare:
<endpoint kind="udpDiscoveryEndpoint" endpointConfiguration="adhocDiscoveryEndpointConfiguration" />
Criteri di ricerca usati per cercare i servizi:
<!-- Add Scopes, ScopeMatchBy, Extensions and termination criteria in FindCriteria -->
<findCriteria scopeMatchBy="http://schemas.microsoft.com/ws/2008/06/discovery/rfc" duration="00:00:10" maxResults="1">
<scopes>
<add scope="http://www.microsoft.com/building42/floor1"/>
</scopes>
<!-- These extensions are sent from the client to the service as part of the probe message -->
<extensions>
<CustomMetadata>This is custom metadata that is sent to the service along with the client's find request.</CustomMetadata>
</extensions>
</findCriteria>
Questo esempio estende questa funzionalità e modifica l'oggetto FindCriteria usato dal client, nonché alcune proprietà dello standard updDiscoveryEndpoint usato per l'individuazione. Le FindCriteria vengono modificate per utilizzare un ambito e un algoritmo specifico scopeMatchBy, oltre a criteri di terminazione personalizzati. Inoltre, l'esempio mostra anche come un client può inviare elementi XML usando Probe messaggi. Infine, alcune modifiche vengono apportate a UdpDiscoveryEndpoint, ad esempio la versione del protocollo usato e le impostazioni specifiche dell'UDP, come illustrato nel file di configurazione seguente.
<udpDiscoveryEndpoint>
<!-- Specify the discovery protocol version and UDP transport settings. -->
<standardEndpoint name="adhocDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11">
<transportSettings duplicateMessageHistoryLength="2048"
maxPendingMessageCount="5"
maxReceivedMessageSize="8192"
maxBufferPoolSize="262144"/>
</standardEndpoint>
</udpDiscoveryEndpoint>
Di seguito è riportata la configurazione client completa usata nell'esempio.
<configuration>
<system.serviceModel>
<client>
<!-- Create an endpoint, make kind="dynamicEndpoint" and use the endpointConfiguration to change settings of DynamicEndpoint -->
<endpoint name="calculatorEndpoint"
binding="wsHttpBinding"
contract="ICalculatorService"
kind ="dynamicEndpoint"
endpointConfiguration="dynamicEndpointConfiguration">
</endpoint>
</client>
<standardEndpoints>
<dynamicEndpoint>
<standardEndpoint name="dynamicEndpointConfiguration">
<discoveryClientSettings>
<!-- Controls where the discovery happens. In this case, Probe message is sent over UdpDiscoveryEndpoint. -->
<endpoint kind="udpDiscoveryEndpoint" endpointConfiguration="adhocDiscoveryEndpointConfiguration" />
<!-- Add Scopes, ScopeMatchBy, Extensions and termination criteria in FindCriteria -->
<findCriteria scopeMatchBy="http://schemas.microsoft.com/ws/2008/06/discovery/rfc" duration="00:00:10" maxResults="1">
<scopes>
<add scope="http://www.microsoft.com/building42/floor1"/>
</scopes>
<!-- These extensions are sent from the client to the service as part of the probe message -->
<extensions>
<CustomMetadata>This is custom metadata that is sent to the service along with the client's find request.</CustomMetadata>
</extensions>
</findCriteria>
</discoveryClientSettings>
</standardEndpoint>
</dynamicEndpoint>
<udpDiscoveryEndpoint>
<!-- Specify the discovery protocol version and UDP transport settings. -->
<standardEndpoint name="adhocDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11">
<transportSettings duplicateMessageHistoryLength="2048"
maxPendingMessageCount="5"
maxReceivedMessageSize="8192"
maxBufferPoolSize="262144"/>
</standardEndpoint>
</udpDiscoveryEndpoint>
</standardEndpoints>
</system.serviceModel>
</configuration>
Per usare questo esempio
Questo esempio usa endpoint HTTP e per eseguire questo esempio è necessario aggiungere gli ACL URL appropriati. Per altre informazioni, vedere Configurazione di HTTP e HTTPS. L'esecuzione del seguente comando con privilegi elevati dovrebbe aggiungere le ACL appropriate. È possibile sostituire il dominio e il nome utente per gli argomenti seguenti se il comando non funziona così com'è.
netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%Costruire la soluzione.
Esegui il file eseguibile del servizio dalla directory di build.
Eseguire il file eseguibile del client. Si noti che il client è in grado di individuare il servizio.