Megosztás:


Konfigurációs minta

A konfigurációs minta egy konfigurációs fájl használatát mutatja be egy szolgáltatás felderíthetővé tétele érdekében.

Szolgáltatáskonfiguráció

A minta konfigurációs fájlja két funkciót mutat be:

  • A szolgáltatás felderíthetővé tétele egy standard UdpDiscoveryEndpointrendszeren keresztül.

  • A szolgáltatás alkalmazásvégpontjának felderítéssel kapcsolatos információinak módosítása és a felderítéssel kapcsolatos beállítások egy részének módosítása a standard végponton.

A felderítés engedélyezéséhez néhány módosítást kell végrehajtani a szolgáltatás alkalmazáskonfigurációs fájljában:

  • A felderítési végpontot hozzá kell adni az <service> elemhez. Ez egy standard UdpDiscoveryEndpoint végpont. Ez egy rendszervégpont, amelyet a futtatókörnyezet a felderítési szolgáltatáshoz társít. A felderítési szolgáltatás figyeli a végponton lévő üzeneteket.

  • A rendszer hozzáad egy <serviceDiscovery> viselkedést a <serviceBehaviors> szakaszhoz. Ez lehetővé teszi a szolgáltatás futásidőben történő felderítését, és a korábban említett felderítési végpont használatával figyeli a felderítési Probe és Resolve üzeneteket. Ezzel a két kiegészítéssel a szolgáltatás felderíthető a megadott felderítési végponton.

A következő konfigurációs kódrészlet egy alkalmazásvégponttal és egy felderítési végponttal rendelkező szolgáltatást jelenít meg:

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

A bejelentések előnyeinek kihasználásához hozzá kell adnia egy bejelentési végpontot. Ehhez módosítsa a konfigurációs fájlt az alábbi kódban látható módon.

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

Ha egy bejelentési végpontot hozzáad a felderítési szolgáltatás viselkedéséhez, létrehoz egy alapértelmezett bejelentési ügyfelet a szolgáltatáshoz. Ez garantálja, hogy a szolgáltatás online és offline bejelentést küld a szolgáltatás megnyitásakor és bezárásakor.

Ez a konfigurációs fájl a további viselkedések módosításával túllép ezen egyszerű lépéseken. A felderítéssel kapcsolatos információk meghatározott végpontok használatával szabályozhatók. Vagyis a felhasználó szabályozhatja, hogy felfedezhető-e egy végpont, és a felhasználó megjelölheti a végpontot egyéni XML-metaadatokkal Scopes is. Ehhez a felhasználónak hozzá kell adnia egy tulajdonságot behaviorConfiguration az alkalmazásvégponthoz. Ebben az esetben a következő tulajdonság lesz hozzáadva az alkalmazásvégponthoz.

behaviorConfiguration="endpointBehaviorConfiguration"

Most a viselkedéskonfigurációs elemen keresztül szabályozhatja a felderítéssel kapcsolatos attribútumokat. Ebben az esetben a rendszer két hatókört ad hozzá az alkalmazásvégponthoz.

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

A hatókörökről további információt a Discovery Find és a FindCriteria című témakörben talál.

A felderítési végpont konkrét részleteit is szabályozhatja. Ezt a StandardEndpointsSection-on keresztül hajtják végre. Ebben a mintában a használt protokoll verziója módosul, valamint hozzáad egy maxResponseDelay attribútumot az alábbi kód példájában látható módon.

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

A példában használt teljes konfigurációs fájl a következő:

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

Ügyfélkonfiguráció

Az ügyfél alkalmazáskonfigurációs fájljában egy standardEndpoint típusú dynamicEndpoint van használatban a felfedezéshez az alábbi konfigurációs részlet szerint.

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

Amikor egy ügyfél használ egy modult dynamicEndpoint, a futtatókörnyezet automatikusan elvégzi a felderítést. A felderítés során különböző beállításokat használnak, például a discoveryClientSettings szakaszban definiált beállításokat, amelyek meghatározzák a használni kívánt felderítési végpont típusát:

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

A szolgáltatások kereséséhez használt keresési feltételek:

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

Ez a minta kibővíti ezt a funkciót, és módosítja az FindCriteria ügyfél által használt elemét, valamint a felderítéshez használt szabvány updDiscoveryEndpoint néhány tulajdonságát. A FindCriteria módosítva van, hogy hatókört és adott scopeMatchBy algoritmust, valamint egyéni megszüntetési feltételeket használjon. A minta emellett azt is bemutatja, hogyan küldhet az ügyfél XML-elemeket üzenetek használatával Probe . Végül néhány módosítás történik a UdpDiscoveryEndpointprotokollon, például a használt protokoll verzióján és az UDP-specifikus beállításokon az alábbi konfigurációs fájlban látható módon.

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

A következő a mintában használt teljes ügyfélkonfiguráció.

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

A minta használata

  1. Ez a minta HTTP-végpontokat használ, és a minta futtatásához hozzá kell adni a megfelelő URL-hozzáférés-vezérlési listákat. További információ: HTTP és HTTPS konfigurálása. Ha a következő parancsot emelt szintű jogosultsággal hajtja végre, hozzá kell adnia a megfelelő ACL-eket. Ha a parancs nem működik, érdemes lehet a Domain és a felhasználónév helyett a következő argumentumokat használni. netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. Hozza létre a megoldást.

  3. Futtassa a végrehajtható szolgáltatást a buildkönyvtárból.

  4. Futtassa az ügyfél-végrehajtható fájlt. Vegye figyelembe, hogy az ügyfél képes megtalálni a szolgáltatást.