Sdílet prostřednictvím


Ukázka konfigurace

Ukázka konfigurace ukazuje použití konfiguračního souboru k zajištění zjistitelné služby.

Konfigurace služby

Konfigurační soubor v této ukázce ukazuje dvě funkce:

  • Učinění služby zjistitelnou pomocí standardu UdpDiscoveryEndpoint.

  • Úprava informací souvisejících se zjišťováním pro koncový bod aplikace služby a úprava některých nastavení souvisejících se zjišťováním na standardním koncovém bodu

Pokud chcete povolit zjišťování, je potřeba provést několik změn v konfiguračním souboru aplikace pro službu:

  • Koncový bod zjišťování musí být přidán do elementu <service> . Toto je standardní UdpDiscoveryEndpoint koncový bod. Toto je systémový koncový bod, který modul runtime přidruží ke službě zjišťování. Služba zjišťování naslouchá zprávám v tomto koncovém bodu.

  • Do sekce <serviceDiscovery> se přidá <serviceBehaviors> chování. To umožňuje zjištění služby za běhu a používá k tomu dříve uvedený koncový bod zjišťování, aby naslouchal zprávám o zjištění Probe a Resolve. Díky těmto dvěma sčítáním je služba zjistitelná v zadaném koncovém bodu zjišťování.

Následující fragment kódu konfigurace ukazuje službu s koncovým bodem aplikace a definovaným koncovým bodem zjišťování:

<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>

Pokud chcete využít výhod oznámení, budete muset přidat koncový bod oznámení. Uděláte to tak, že upravíte konfigurační soubor, jak je znázorněno v následujícím kódu.

<serviceDiscovery>
            <announcementEndpoints>
              <endpoint kind="udpAnnouncementEndpoint"/>
            </announcementEndpoints>
          </serviceDiscovery>

Přidání koncového bodu oznámení do chování služby pro zjišťování vytvoří výchozího klienta oznámení pro službu. To zaručuje, že služba odešle online a offline oznámení při otevření a zavření služby.

Tento konfigurační soubor přesahuje jenom tyto jednoduché kroky úpravou dalšího chování. Pomocí konkrétních koncových bodů je možné řídit informace související se zjišťováním. To znamená, že uživatel může určit, jestli je možné koncový bod zjistit, a uživatel může tento koncový bod označit také pomocí Scopes vlastních metadat XML. Aby to uživatel udělal, musí do koncového bodu aplikace přidat behaviorConfiguration vlastnost. V tomto případě se do koncového bodu aplikace přidá následující vlastnost.

behaviorConfiguration="endpointBehaviorConfiguration"

Teď můžete prostřednictvím elementu konfigurace chování řídit atributy související se zjišťováním. V tomto případě se do koncového bodu aplikace přidají dva obory.

<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>

Další informace o rozsazích naleznete v tématu Discovery Find, FindCriteria.

Můžete také řídit konkrétní podrobnosti koncového bodu zjišťování. To se provádí prostřednictvím StandardEndpointsSection. V této ukázce se upraví verze použitého protokolu a přidá maxResponseDelay atribut, jak je znázorněno v následujícím příkladu kódu.

<standardEndpoints>
   <udpDiscoveryEndpoint>
      <standardEndpoint name="adhocDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11" maxResponseDelay="00:00:00.600" />
   </udpDiscoveryEndpoint>
</standardEndpoints>

Následuje úplný konfigurační soubor použitý v tomto příkladu:

<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>

Konfigurace klienta

V konfiguračním souboru aplikace pro klienta se používá standardEndpoint typu dynamicEndpoint k využití zjišťování, jak je znázorněno v následujícím fragmentu konfigurace.

<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>

Pokud klient používá dynamicEndpoint, modul runtime provede zjišťování automaticky. Při zjišťování se používají různá nastavení, například nastavení definovaná v discoveryClientSettings části, která určuje typ koncového bodu zjišťování, který se má použít:

<endpoint kind="udpDiscoveryEndpoint" endpointConfiguration="adhocDiscoveryEndpointConfiguration" />

Kritéria hledání používaná k hledání služeb:

<!-- 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>

Tato ukázka rozšiřuje tuto funkci a upravuje FindCriteria používané klientem a také některé vlastnosti standardu updDiscoveryEndpoint používaného ke zjišťování. FindCriteria se přizpůsobí tak, aby používaly konkrétní obor a scopeMatchBy algoritmus a zároveň specifická kritéria ukončení. Kromě toho ukázka také ukazuje, jak klient může odesílat elementy XML pomocí Probe zpráv. Nakonec jsou provedeny některé změny, jako je například UdpDiscoveryEndpointverze použitého protokolu a nastavení specifické pro UDP, jak je znázorněno v následujícím konfiguračním souboru.

<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>

Následuje úplná konfigurace klienta použitá v ukázce.

<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>

Použití této ukázky

  1. Tato ukázka používá koncové body HTTP a aby byla tato ukázka spuštěna, je nutné přidat správné URL ACLs. Další informace najdete v tématu Konfigurace PROTOKOLU HTTP a HTTPS. Spuštěním následujícího příkazu se zvýšenými oprávněními by se měly přidat příslušné seznamy ACL. Pokud příkaz nefunguje tak, jak je, může být vhodné nahradit doménu a uživatelské jméno následujícími argumenty. netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. Sestavte řešení.

  3. Spusťte spustitelný soubor služby z adresáře sestavení.

  4. Spusťte spustitelný soubor klienta. Všimněte si, že klient dokáže službu najít.