Udostępnij za pośrednictwem


Konfiguracja — przykład

W przykładzie Configuration pokazano użycie pliku konfiguracji w celu odnalezienia usługi.

Konfiguracja usługi

Plik konfiguracji w tym przykładzie przedstawia dwie funkcje:

  • Dzięki czemu usługa jest odnajdywalna za pośrednictwem standardowego UdpDiscoveryEndpoint.

  • Dostosowanie informacji związanych z odnajdywaniem dla punktu końcowego aplikacji usługi i dostosowanie niektórych ustawień związanych z odnajdywaniem w standardowym punkcie końcowym.

Aby włączyć odnajdywanie, należy wprowadzić kilka zmian w pliku konfiguracji aplikacji dla usługi:

  • Do elementu należy dodać <service> punkt końcowy odnajdywania. Jest to standardowy UdpDiscoveryEndpoint punkt końcowy. Jest to punkt końcowy systemu, który środowisko uruchomieniowe kojarzy z usługą odnajdywania. Usługa odnajdywania nasłuchuje komunikatów w tym punkcie końcowym.

  • Zachowanie <serviceDiscovery> jest dodawane do <serviceBehaviors> sekcji. Dzięki temu usługa może zostać odnaleziona w czasie wykonywania i używa punktu końcowego odnajdywania wymienionego wcześniej do nasłuchiwania odnajdywania Probe i Resolve komunikatów. Dzięki tym dwóm dodaniu usługa jest wykrywalna w określonym punkcie końcowym odnajdywania.

Poniższy fragment kodu konfiguracji przedstawia usługę z punktem końcowym aplikacji i zdefiniowanym punktem końcowym odnajdywania:

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

Aby skorzystać z anonsów, musisz dodać punkt końcowy anonsu. W tym celu zmodyfikuj plik konfiguracji, jak pokazano w poniższym kodzie.

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

Dodanie punktu końcowego anonsu do zachowania usługi odnajdywania powoduje utworzenie domyślnego klienta anonsu dla usługi. Gwarantuje to, że usługa wyśle powiadomienie online i offline, gdy usługa zostanie odpowiednio otwarta i zamknięta.

Ten plik konfiguracji wykracza poza te proste kroki, modyfikując dodatkowe zachowania. Istnieje możliwość kontrolowania informacji związanych z odnajdywaniem przy użyciu określonych punktów końcowych. Oznacza to, że użytkownik może kontrolować, czy punkt końcowy można odnaleźć, a użytkownik może również oznaczyć ten punkt końcowy przy użyciu Scopes niestandardowych metadanych XML. Aby to zrobić, użytkownik musi dodać behaviorConfiguration właściwość do punktu końcowego aplikacji. W takim przypadku następująca właściwość zostanie dodana do punktu końcowego aplikacji.

behaviorConfiguration="endpointBehaviorConfiguration"

Teraz za pomocą elementu konfiguracji zachowania można kontrolować atrybuty związane z odnajdywaniem. W takim przypadku do punktu końcowego aplikacji są dodawane dwa zakresy.

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

Aby uzyskać więcej informacji na temat zakresów, zobacz Znajdowanie odnajdywania i znajdowanie krytyki.

Możesz również kontrolować szczegółowe informacje o punkcie końcowym odnajdywania. Odbywa się to za pośrednictwem .StandardEndpointsSection W tym przykładzie używana wersja protokołu jest modyfikowana, a także dodaje maxResponseDelay atrybut, jak pokazano w poniższym przykładzie kodu.

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

Poniższy plik konfiguracji jest kompletny używany w tym przykładzie:

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

Konfiguracja klienta

W pliku konfiguracji aplikacji dla klienta jest używany typ dynamicEndpoint do korzystania z odnajdywania, standardEndpoint jak pokazano w poniższym fragmencie konfiguracji.

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

Gdy klient używa dynamicEndpointelementu , środowisko uruchomieniowe automatycznie wykonuje odnajdywanie. Podczas odnajdywania są używane różne ustawienia, takie jak te zdefiniowane w discoveryClientSettings sekcji, które określają typ punktu końcowego odnajdywania do użycia:

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

Kryteria znajdowania używane do wyszukiwania usług:

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

Ten przykład rozszerza tę funkcję i modyfikuje FindCriteria używane przez klienta, a także niektóre właściwości standardu updDiscoveryEndpoint używanego do odnajdywania. Są FindCriteria one modyfikowane tak, aby używały zakresu i określonego scopeMatchBy algorytmu, a także niestandardowych kryteriów zakończenia. Ponadto w przykładzie pokazano również, jak klient może wysyłać elementy XML przy użyciu Probe komunikatów. Na koniec wprowadzono pewne zmiany UdpDiscoveryEndpointw pliku , takie jak wersja używanego protokołu i ustawienia specyficzne dla protokołu UDP, jak pokazano w poniższym pliku konfiguracji.

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

Poniżej przedstawiono kompletną konfigurację klienta używaną w przykładzie.

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

Aby użyć tego przykładu

  1. W tym przykładzie użyto punktów końcowych HTTP i do uruchomienia tego przykładu należy dodać odpowiednie listy ACL adresów URL. Aby uzyskać więcej informacji, zobacz Konfigurowanie protokołu HTTP i HTTPS. Wykonanie następującego polecenia z podwyższonym poziomem uprawnień powinno spowodować dodanie odpowiednich list ACL. Jeśli polecenie nie działa, możesz zastąpić domenę i nazwę użytkownika następującymi argumentami. netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. Stwórz rozwiązanie.

  3. Uruchom plik wykonywalny usługi z katalogu kompilacji.

  4. Uruchom plik wykonywalny klienta. Należy pamiętać, że klient może zlokalizować usługę.