Configuratievoorbeeld
Het configuratievoorbeeld laat het gebruik van een configuratiebestand zien om een service detecteerbaar te maken.
Serviceconfiguratie
Het configuratiebestand in dit voorbeeld demonstreert twee functies:
De service detecteerbaar maken via een standaard UdpDiscoveryEndpoint.
Het aanpassen van detectie-gerelateerde informatie voor het toepassingseindpunt van de service en het aanpassen van enkele detectie-gerelateerde instellingen op het standaardeindpunt.
Als u detectie wilt inschakelen, moeten er enkele wijzigingen worden aangebracht in het toepassingsconfiguratiebestand voor de service:
Er moet een detectie-eindpunt worden toegevoegd aan het
<service>
element. Dit is een standaardeindpunt UdpDiscoveryEndpoint . Dit is een systeemeindpunt dat de runtime aan de detectieservice koppelt. De detectieservice luistert naar berichten op dit eindpunt.Er wordt een
<serviceDiscovery>
gedrag toegevoegd aan de<serviceBehaviors>
sectie. Hierdoor kan de service tijdens runtime worden gedetecteerd en wordt het eerder genoemde detectie-eindpunt gebruikt om te luisteren naar detectieProbe
enResolve
berichten. Met deze twee toevoegingen kan de service worden gedetecteerd op het opgegeven detectie-eindpunt.
In het volgende configuratiefragment ziet u een service met een toepassingseindpunt en een detectie-eindpunt gedefinieerd:
<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>
Als u wilt profiteren van aankondigingen, moet u een aankondigingseindpunt toevoegen. Hiervoor wijzigt u het configuratiebestand, zoals wordt weergegeven in de volgende code.
<serviceDiscovery>
<announcementEndpoints>
<endpoint kind="udpAnnouncementEndpoint"/>
</announcementEndpoints>
</serviceDiscovery>
Als u een aankondigingseindpunt toevoegt aan het detectieservicegedrag, wordt er een standaardaankondigingsclient voor de service gemaakt. Dit garandeert dat de service een online- en offlineaankondiging verzendt wanneer de service wordt geopend en gesloten.
Dit configuratiebestand gaat verder dan alleen die eenvoudige stappen door extra gedrag te wijzigen. Het is mogelijk om detectie-gerelateerde informatie te beheren met behulp van specifieke eindpunten. Dat wil gezegd: een gebruiker kan bepalen of een eindpunt kan worden gedetecteerd en de gebruiker kan dat eindpunt ook markeren met Scopes en aangepaste XML-metagegevens. Hiervoor moet de gebruiker een behaviorConfiguration
eigenschap toevoegen aan het toepassingseindpunt. In dit geval wordt de volgende eigenschap toegevoegd aan het toepassingseindpunt.
behaviorConfiguration="endpointBehaviorConfiguration"
Via het configuratie-element gedrag kunt u nu detectiegerelateerde kenmerken beheren. In dit geval worden er twee bereiken toegevoegd aan het toepassingseindpunt.
<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>
Zie Discovery Find en FindCriteria voor meer informatie over bereiken.
U kunt ook specifieke details van het detectie-eindpunt beheren. Dit gebeurt via de StandardEndpointsSection. In dit voorbeeld wordt de gebruikte versie van het protocol gewijzigd en wordt een maxResponseDelay
kenmerk toegevoegd, zoals wordt weergegeven in het volgende codevoorbeeld.
<standardEndpoints>
<udpDiscoveryEndpoint>
<standardEndpoint name="adhocDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11" maxResponseDelay="00:00:00.600" />
</udpDiscoveryEndpoint>
</standardEndpoints>
Hier volgt het volledige configuratiebestand dat in dit voorbeeld wordt gebruikt:
<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>
Clientconfiguratie
In het toepassingsconfiguratiebestand voor de client wordt een standardEndpoint
type dynamicEndpoint
gebruikt om detectie te gebruiken, zoals wordt weergegeven in het volgende configuratiefragment.
<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>
Wanneer een client een dynamicEndpoint
client gebruikt, voert de runtime automatisch detectie uit. Er worden verschillende instellingen gebruikt tijdens de detectie, zoals de instellingen die zijn gedefinieerd in de discoveryClientSettings
sectie, waarmee het type detectie-eindpunt wordt opgegeven dat moet worden gebruikt:
<endpoint kind="udpDiscoveryEndpoint" endpointConfiguration="adhocDiscoveryEndpointConfiguration" />
De zoekcriteria die worden gebruikt om te zoeken naar services:
<!-- 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>
Dit voorbeeld breidt deze functie uit en wijzigt het FindCriteria gebruik door de client, evenals enkele eigenschappen van de standaard updDiscoveryEndpoint
die wordt gebruikt voor detectie. De FindCriteria wijzigingen worden aangepast om een bereik en een specifiek scopeMatchBy
algoritme te gebruiken, evenals aangepaste beëindigingscriteria. Bovendien ziet u in het voorbeeld hoe een client XML-elementen kan verzenden met behulp van Probe
berichten. Ten slotte worden er enkele wijzigingen aangebracht in de UdpDiscoveryEndpoint, zoals de versie van het gebruikte protocol en UDP-specifieke instellingen, zoals wordt weergegeven in het volgende configuratiebestand.
<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>
Hier volgt de volledige clientconfiguratie die in het voorbeeld wordt gebruikt.
<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>
Dit voorbeeld gebruiken
Dit voorbeeld maakt gebruik van HTTP-eindpunten en om dit voorbeeld uit te voeren, moeten de juiste URL-ACL's worden toegevoegd. Zie HTTP en HTTPS configureren voor meer informatie. Als u de volgende opdracht uitvoert met een verhoogde bevoegdheid, moet u de juiste ACL's toevoegen. U kunt uw domein en gebruikersnaam vervangen door de volgende argumenten als de opdracht niet werkt zoals is.
netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%
Bouw de oplossing.
Voer het uitvoerbare bestand van de service uit vanuit de buildmap.
Voer het uitvoerbare clientbestand uit. Houd er rekening mee dat de client de service kan vinden.