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:
Zajištění zjistitelné služby ve 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
<serviceDiscovery>
oddílu<serviceBehaviors>
se přidá chování. To umožňuje, aby služba byla zjištěna za běhu a používá koncový bod zjišťování uvedený dříve k naslouchání zjišťováníProbe
aResolve
zpráv. 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 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 oborech naleznete v tématu Hledání zjišťování a 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 typ používá k využití zjišťování, standardEndpoint
dynamicEndpoint
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í. Upraví se FindCriteria tak, aby používal obor a určitý scopeMatchBy
algoritmus a také vlastní 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 UdpDiscoveryEndpointněkteré změny , například verze 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
Tato ukázka používá koncové body HTTP a ke spuštění této ukázky je nutné přidat správné seznamy ACL adres URL. 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%
Sestavte řešení.
Spusťte spustitelný soubor služby z adresáře sestavení.
Spusťte spustitelný soubor klienta. Všimněte si, že klient dokáže službu najít.