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 odnajdywaniaProbe
iResolve
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 dynamicEndpoint
elementu , ś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
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%
Stwórz rozwiązanie.
Uruchom plik wykonywalny usługi z katalogu kompilacji.
Uruchom plik wykonywalny klienta. Należy pamiętać, że klient może zlokalizować usługę.