Condividi tramite


Esempio di configurazione

Questo esempio illustra l'utilizzo di un file di configurazione per rendere individuabile un servizio.

Dd483343.note(it-it,VS.100).gifNota:
L'esempio implementa l'individuazione nella configurazione. Per un esempio che implementa l'individuazione nel codice, vedere Esempio di base.

Dd483343.Important(it-it,VS.100).gif 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

  1. 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%

  2. Compilare la soluzione.

  3. Eseguire il servizio eseguibile dalla directory di compilazione.

  4. Eseguire il file eseguibile del client. Il client è in grado di individuare il servizio.