Esempio di configurazione
Questo esempio illustra l'utilizzo di un file di configurazione per rendere individuabile un servizio.
Nota: |
---|
L'esempio implementa l'individuazione nella configurazione. Per un esempio che implementa l'individuazione nel codice, vedere Esempio di base. |
Nota: |
---|
È possibile che gli esempi siano già installati nel computer. Verificare la directory seguente (impostazione predefinita) prima di continuare.
<UnitàInstallazione>:\WF_WCF_Samples
Se questa directory non esiste, andare alla pagina relativa agli esempi di Windows Communication Foundation (WCF) e Windows Workflow Foundation (WF) per .NET Framework 4 per scaricare tutti gli esempi di Windows Communication Foundation (WCF) e WF. Questo esempio si trova nella directory seguente.
<UnitàInstallazione>:\WF_WCF_Samples\WCF\Basic\Discovery\Configuration
|
Configurazione del servizio
Il file di configurazione in questo esempio illustra due funzionalità:
Rendere individuabile il servizio su un UdpDiscoveryEndpoint standard.
Modificare le informazioni correlate all'individuazione per l'endpoint dell'applicazione del servizio e modificare alcune delle impostazioni correlate all'individuazione nell'endpoint standard.
Per abilitare l'individuazione, è necessario effettuare due modifiche nel file di configurazione dell'applicazione per il servizio:
È necessario aggiungere un endpoint di individuazione all'elemento
<service>
. Si tratta di un endpoint UdpDiscoveryEndpoint standard. Si tratta di un endpoint del sistema che il runtime associa al servizio di individuazione. Il servizio di individuazione è in ascolto dei messaggi su tale endpoint.Un comportamento
<serviceDiscovery>
viene aggiunto alla sezione<serviceBehaviors>
. Ciò consente al servizio di essere individuato in fase di runtime e l'endpoint di individuazione menzionato in precedenza viene utilizzato per rimanere in ascolto di messaggi Probe e Resolve di individuazione. Con queste due aggiunte, il servizio è individuabile in corrispondenza dell'endpoint di individuazione specificato.
Il file di configurazione va oltre tali semplici passaggi modificando i comportamenti aggiuntivi. È possibile controllare le informazioni correlate all'individuazione tramite endpoint specifici. Ovvero, un utente può controllare se è possibile individuare un endpoint e può anche contrassegnare tale endpoint con Scopes e metadati XML personalizzati. A tale scopo, l'utente deve aggiungere una proprietà behaviorConfiguration
all'endpoint dell'applicazione. In questo caso, la proprietà seguente viene aggiunta all'endpoint dell'applicazione.
behaviorConfiguration="endpointBehaviorConfiguration"
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.
È inoltre possibile controllare dettagli specifici dell'endpoint di individuazione. Questa operazione viene effettuata tramite StandardEndpointsSection. In questo esempio, viene modificata la versione del protocollo utilizzata e viene aggiunto un attributo maxResponseDelay
, come illustrato nell'esempio di codice seguente.
<configuration>
<system.serviceModel>
<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>
<behaviors>
<serviceBehaviors>
<behavior name="calculatorServiceBehavior">
<serviceDiscovery/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="endpointBehaviorConfiguration">
<endpointDiscovery>
<scopes>
<add scope="http://www.example.org/calculator"/>
<add scope="ldap:///ou=engineering,o=exampleorg,c=us"/>
</scopes>
</endpointDiscovery>
</behavior>
</endpointBehaviors>
</behaviors>
<standardEndpoints>
<udpDiscoveryEndpoint>
<!-- Specify the discovery protocol version and maxResponseDelay -->
<standardEndpoint name="adhocDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11" maxResponseDelay="00:00:00.600" />
</udpDiscoveryEndpoint>
</standardEndpoints>
</system.serviceModel>
</configuration>
Configurazione del client
Nel file di configurazione dell'applicazione per il client, un standardEndpoint
di tipo dynamicEndpoint
viene impiegato per utilizzare l'individuazione. Quando un client sta utilizzando un dynamicEndpoint
, il runtime esegue automaticamente l'individuazione. Durante l'individuazione vengono utilizzate varie impostazioni predefinite, ad esempio discoveryClient
, che esegue la ricerca di un servizio che corrisponda al contratto specificato dal client utilizzando un endpoint udpDiscovery standard. L'esempio estende tale funzionalità e modifica i FindCriteria utilizzati dal client e alcune proprietà dell'updDiscoveryEndpoint
standard utilizzate per l'individuazione. I FindCriteria vengono modificati per utilizzare un ambito e un algoritmo scopeMatchBy
specifico, oltre a criteri di chiusura personalizzati. Inoltre, l'esempio mostra anche come un client è in grado di inviare elementi XML utilizzando messaggi Probe
. Infine, alcune modifiche vengono apportate a UdpDiscoveryEndpoint, ad esempio la versione del protocollo utilizzata e impostazioni specifiche dell'UDP, come mostrato nel file di configurazione seguente.
<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="https://schemas.microsoft.com/ws/2008/06/discovery/rfc" duration="00:00:10" maxResults="1">
<scopes>
<add scope="https://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>
Per utilizzare questo esempio
Questo esempio utilizza endpoint HTTP e, per eseguirlo, è necessario aggiungere ACL URL appropriati. Per ulteriori informazioni, vedere Configurazione di HTTP e HTTPS. L'esecuzione del comando seguente con privilegi elevati consente di aggiungere gli ACL appropriati. È possibile sostituire dominio e nome utente per gli argomenti seguenti se il comando non funziona in modo corretto.
netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%
Compilare la soluzione.
Eseguire il servizio eseguibile dalla directory di compilazione.
Eseguire il file eseguibile del client. Il client è in grado di individuare il servizio.