Konfigurationsexempel
Konfigurationsexemplet visar användningen av en konfigurationsfil för att göra en tjänst identifierbar.
Tjänstkonfiguration
Konfigurationsfilen i det här exemplet visar två funktioner:
Gör tjänsten identifierbar via en standard UdpDiscoveryEndpoint.
Justera identifieringsrelaterad information för tjänstens programslutpunkt och justera några av de identifieringsrelaterade inställningarna på standardslutpunkten.
För att aktivera identifiering måste några ändringar göras i programkonfigurationsfilen för tjänsten:
En identifieringsslutpunkt måste läggas till i elementet
<service>
. Det här är en standardslutpunkt UdpDiscoveryEndpoint . Det här är en systemslutpunkt som körningen associerar med identifieringstjänsten. Identifieringstjänsten lyssnar efter meddelanden på den här slutpunkten.Ett
<serviceDiscovery>
beteende läggs till i avsnittet<serviceBehaviors>
. Detta gör att tjänsten kan identifieras vid körning och använder identifieringsslutpunkten som nämnts tidigare för att lyssna efter identifieringProbe
ochResolve
meddelanden. Med dessa två tillägg kan tjänsten identifieras vid den angivna identifieringsslutpunkten.
Följande konfigurationsfragment visar en tjänst med en programslutpunkt och en definierad identifieringsslutpunkt:
<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>
Om du vill dra nytta av meddelanden måste du lägga till en slutpunkt för meddelanden. Det gör du genom att ändra konfigurationsfilen enligt följande kod.
<serviceDiscovery>
<announcementEndpoints>
<endpoint kind="udpAnnouncementEndpoint"/>
</announcementEndpoints>
</serviceDiscovery>
Om du lägger till en slutpunkt för meddelanden i identifieringstjänsten skapas en standardmeddelandeklient för tjänsten. Detta garanterar att tjänsten skickar ett online- och offlinemeddelande när tjänsten öppnas respektive stängs.
Den här konfigurationsfilen går utöver de enkla stegen genom att ändra ytterligare beteenden. Det är möjligt att kontrollera identifieringsrelaterad information med hjälp av specifika slutpunkter. En användare kan alltså styra om en slutpunkt kan identifieras och användaren kan också markera slutpunkten med Scopes och anpassade XML-metadata. För att göra detta måste användaren lägga till en behaviorConfiguration
egenskap i programslutpunkten. I det här fallet läggs följande egenskap till i programslutpunkten.
behaviorConfiguration="endpointBehaviorConfiguration"
Nu kan du via beteendekonfigurationselementet styra identifieringsrelaterade attribut. I det här fallet läggs två omfång till i programslutpunkten.
<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>
Mer information om omfång finns i Identifieringssökning och FindCriteria.
Du kan också styra specifik information om identifieringsslutpunkten. Detta görs via StandardEndpointsSection. I det här exemplet ändras den version av protokollet som används samt lägger till ett maxResponseDelay
attribut som visas i följande kodexempel.
<standardEndpoints>
<udpDiscoveryEndpoint>
<standardEndpoint name="adhocDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11" maxResponseDelay="00:00:00.600" />
</udpDiscoveryEndpoint>
</standardEndpoints>
Följande är den fullständiga konfigurationsfilen som används i det här exemplet:
<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>
Klientkonfiguration
I programkonfigurationsfilen för klienten används en standardEndpoint
typ dynamicEndpoint
för att använda identifiering enligt följande konfigurationsfragment.
<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>
När en klient använder en dynamicEndpoint
utför körningen identifiering automatiskt. Olika inställningar används under identifieringen, till exempel de som definieras i discoveryClientSettings
avsnittet, som anger vilken typ av identifieringsslutpunkt som ska användas:
<endpoint kind="udpDiscoveryEndpoint" endpointConfiguration="adhocDiscoveryEndpointConfiguration" />
Sökkriterierna som används för att söka efter tjänster:
<!-- 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>
Det här exemplet utökar den här funktionen och ändrar den FindCriteria som används av klienten, samt vissa egenskaper för den standard updDiscoveryEndpoint
som används för identifiering. FindCriteria Ändras för att använda ett omfång och en specifik scopeMatchBy
algoritm, samt anpassade avslutningsvillkor. Dessutom visar exemplet också hur en klient kan skicka XML-element med hjälp av Probe
meddelanden. Slutligen görs vissa ändringar i UdpDiscoveryEndpoint, till exempel den version av protokollet som används och UDP-specifika inställningar som visas i följande konfigurationsfil.
<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>
Följande är den fullständiga klientkonfigurationen som används i exemplet.
<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>
Så här använder du det här exemplet
Det här exemplet använder HTTP-slutpunkter och för att köra det här exemplet måste rätt URL-ACL:er läggas till. Mer information finns i Konfigurera HTTP och HTTPS. Om du kör följande kommando med en förhöjd behörighet bör du lägga till lämpliga ACL:er. Du kanske vill ersätta domänen och användarnamnet med följande argument om kommandot inte fungerar som det är.
netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%
Skapa lösningen.
Kör den körbara tjänsten från byggkatalogen.
Kör den körbara klienten. Observera att klienten kan hitta tjänsten.