Konfigurowanie odnajdywania w pliku konfiguracji
W odnajdywanie są używane cztery główne grupy ustawień konfiguracji. W tym temacie krótko opisano poszczególne elementy i przedstawiono przykłady sposobu ich konfigurowania. Po każdej sekcji znajdziesz link do bardziej szczegółowej dokumentacji dotyczącej poszczególnych obszarów.
Konfiguracja zachowania
Odnajdywanie używa zachowań usługi i zachowań punktów końcowych. Zachowanie ServiceDiscoveryBehavior umożliwia odnajdywanie wszystkich punktów końcowych usługi i umożliwia określenie punktów końcowych anonsu. W poniższym przykładzie pokazano, jak dodać ServiceDiscoveryBehavior element i określić punkt końcowy anonsu.
<behaviors>
<serviceBehaviors>
<behavior name="helloWorldServiceBehavior">
<serviceDiscovery>
<announcementEndpoints>
<endpoint kind="udpAnnouncementEndpoint"/>
</announcementEndpoints>
</serviceDiscovery>
</behavior>
</serviceBehaviors>
</behaviors>
Po określeniu zachowania odwołaj się do niego z <service>
elementu, jak pokazano w poniższym przykładzie.
<system.serviceModel>
<services>
<service name="HelloWorldService" behaviorConfiguration="helloWorldServiceBehavior">
<!-- Application Endpoint -->
<endpoint address="endpoint0"
binding="basicHttpBinding"
contract="IHelloWorldService" />
<!-- Discovery Endpoints -->
<endpoint kind="udpDiscoveryEndpoint" />
</service>
</services>
</system.serviceModel>
Aby można było odnaleźć usługę, należy również dodać punkt końcowy odnajdywania, w powyższym przykładzie dodano UdpDiscoveryEndpoint standardowy punkt końcowy.
Podczas dodawania punktów końcowych anonsu należy również dodać usługę odbiornika anonsów do <services>
elementu, jak pokazano w poniższym przykładzie.
<services>
<service name="HelloWorldService" behaviorConfiguration="helloWorldServiceBehavior">
<!-- Application Endpoint -->
<endpoint address="endpoint0"
binding="basicHttpBinding"
contract="IHelloWorldService" />
<!-- Discovery Endpoints -->
<endpoint kind="udpDiscoveryEndpoint" />
</service>
<!-- Announcement Listener Configuration -->
<service name="AnnouncementListener">
<endpoint kind="udpAnnouncementEndpoint" />
</service>
</services>
To EndpointDiscoveryBehavior zachowanie służy do włączania lub wyłączania odnajdywania określonego punktu końcowego. Poniższy przykład konfiguruje usługę z dwoma punktami końcowymi aplikacji, po jednym z włączonym odnajdywaniem i jednym z wyłączonym odnajdywaniem. Dla każdego punktu końcowego EndpointDiscoveryBehavior jest dodawane zachowanie.
<system.serviceModel>
<services>
<service name="HelloWorldService"
behaviorConfiguration="helloWorldServiceBehavior">
<!-- Application Endpoints -->
<endpoint address="endpoint0"
binding="basicHttpBinding"
contract="IHelloWorldService"
behaviorConfiguration="ep0Behavior" />
<endpoint address="endpoint1"
binding="basicHttpBinding"
contract="IHelloWorldService"
behaviorConfiguration="ep1Behavior" />
<!-- Discovery Endpoints -->
<endpoint kind="udpDiscoveryEndpoint" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="helloWorldServiceBehavior">
<serviceDiscovery />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="ep0Behavior">
<endpointDiscovery enabled="true"/>
</behavior>
<behavior name="ep1Behavior">
<endpointDiscovery enabled="false"/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
Zachowanie EndpointDiscoveryBehavior może również służyć do dodawania niestandardowych metadanych do metadanych punktu końcowego zwracanych przez usługę. W przykładzie poniżej pokazano, jak to zrobić.
<behavior name="ep4Behavior">
<endpointDiscovery enabled="true">
<extensions>
<CustomMetadata>This is custom metadata.</CustomMetadata>
<d:Types xmlns:d="http://schemas.xmlsoap.org/ws/2005/04/discovery" xmlns:i="http://printer.example.org/2003/imaging">i:PrintBasic</d:Types>
<CustomMetadata nested="true">
<NestedMetadata>This is a nested custom metadata.</NestedMetadata>
</CustomMetadata>
</extensions>
</endpointDiscovery>
</behavior>
Zachowanie EndpointDiscoveryBehavior może również służyć do dodawania zakresów i typów używanych przez klientów do wyszukiwania usług. W poniższym przykładzie pokazano, jak to zrobić w pliku konfiguracji po stronie klienta.
<behavior name="ep2Behavior">
<endpointDiscovery enabled="true">
<scopes>
<add scope="http://www.microsoft.com/building42/floor1"/>
<add scope="ldap:///ou=engineeringo=examplecomc=us"/>
</scopes>
<types>
<add name="test" namespace="http://example.microsoft.com/" />
<add name="additionalContract" namespace="http://example.microsoft.com/" />
</types>
</endpointDiscovery>
</behavior>
Aby uzyskać więcej informacji na temat ServiceDiscoveryBehavior odnajdywania WCF, EndpointDiscoveryBehavior zobacz Omówienie odnajdywania WCF.
Konfiguracja elementu powiązania
Konfiguracja elementu powiązania jest najbardziej interesująca po stronie klienta. Za pomocą konfiguracji można określić kryteria znajdowania używane do odnajdywania usług z aplikacji klienckiej WCF. Poniższy przykład tworzy niestandardowe powiązanie z kanałem DiscoveryClient i określa kryteria znajdowania, które obejmują typ i zakres. Ponadto określa wartości właściwości Duration i MaxResults .
<bindings>
<customBinding>
<!-- Binding Configuration for the Application Endpoint -->
<binding name="discoBindingConfiguration">
<discoveryClient>
<endpoint kind="discoveryEndpoint"
address="http://localhost:8000/ConfigTest/Discovery"
binding="customBinding"
bindingConfiguration="httpSoap12WSAddressing10"/>
<findCriteria duration="00:00:10" maxResults="2">
<types>
<add name="IHelloWorldService"/>
</types>
<scopes>
<add scope="http://www.microsoft.com/building42/floor1"/>
</scopes>
</findCriteria>
</discoveryClient>
<textMessageEncoding messageVersion="Soap11"/>
<httpTransport />
</binding>
</customBinding>
</bindings>
Do tej niestandardowej konfiguracji powiązania należy odwoływać się do punktu końcowego klienta:
<client>
<endpoint address="http://schemas.microsoft.com/discovery/dynamic"
binding="customBinding"
bindingConfiguration="discoBindingConfiguration"
contract="IHelloWorldService" />
</client>
Aby uzyskać więcej informacji na temat znajdowania kryteriów, zobacz Znajdowanie odnajdywania i Znajdowanie krytyki. Aby uzyskać więcej informacji o elementach odnajdywania i powiązań, zobacz Omówienie odnajdywania WCF
Standardowa konfiguracja punktu końcowego
Standardowe punkty końcowe to wstępnie zdefiniowane punkty końcowe, które mają wartości domyślne dla co najmniej jednej właściwości (adresu, powiązania lub kontraktu) lub co najmniej jednej wartości właściwości, których nie można zmienić. Platforma .NET 4 jest dostarczana z 3 punktami końcowymi standardowymi dotyczącymi odnajdywania: UdpDiscoveryEndpoint, UdpAnnouncementEndpoint, i DynamicEndpoint. Jest UdpDiscoveryEndpoint to standardowy punkt końcowy, który jest wstępnie skonfigurowany do operacji odnajdywania za pośrednictwem powiązania multiemisji UDP. Jest UdpAnnouncementEndpoint to standardowy punkt końcowy, który jest wstępnie skonfigurowany do wysyłania komunikatów anonsów za pośrednictwem powiązania UDP. Jest DynamicEndpoint to standardowy punkt końcowy, który używa odnajdywania do znajdowania adresu punktu końcowego odnalezionej usługi dynamicznie w czasie wykonywania. Powiązania standardowe są określane z elementem zawierającym <endpoint>
atrybut kind, który określił typ standardowego punktu końcowego do dodania. W poniższym przykładzie pokazano, jak dodać element UdpDiscoveryEndpoint i .UdpAnnouncementEndpoint
<services>
<service name="HelloWorldService">
<!-- ... -->
<endpoint kind="udpDiscoveryEndpoint" />
</service>
<service name="AnnouncementListener">
<endpoint kind="udpAnnouncementEndpoint" />
</service>
</services>
Standardowe punkty końcowe są konfigurowane w elemecie <standardEndpoints>
. W poniższym przykładzie pokazano, jak skonfigurować element UdpDiscoveryEndpoint i UdpAnnouncementEndpoint.
<standardEndpoints>
<udpAnnouncementEndpoint>
<standardEndpoint
name="udpAnnouncementEndpointSettings"
multicastAddress="soap.udp://239.255.255.250:3703"
maxAnnouncementDelay="00:00:00.800">
<transportSettings
duplicateMessageHistoryLength="1028"
maxPendingMessageCount="10"
maxMulticastRetransmitCount="3"
maxUnicastRetransmitCount="2"
socketReceiveBufferSize="131072"
timeToLive="2" />
</standardEndpoint>
</udpAnnouncementEndpoint>
<udpDiscoveryEndpoint>
<standardEndpoint
name="udpDiscoveryEndpointSettings"
multicastAddress="soap.udp://239.255.255.252:3704"
maxResponseDelay="00:00:00.800">
<transportSettings
duplicateMessageHistoryLength="2048"
maxPendingMessageCount="5"
maxReceivedMessageSize="8192"
maxBufferPoolSize="262144"/>
</standardEndpoint>
</udpDiscoveryEndpoint>
</standardEndpoints>
Po dodaniu standardowej konfiguracji punktu końcowego odwołaj się do konfiguracji w <endpoint>
elemencie dla każdego punktu końcowego, jak pokazano w poniższym przykładzie.
<services>
<service name="HelloWorldService">
<!-- ... -->
<endpoint kind="udpDiscoveryEndpoint" endpointConfiguration="udpDiscoveryEndpointSettings"/>
</service>
<service name="AnnouncementListener">
<endpoint kind="udpAnnouncementEndpoint" endpointConfiguration="udpAnnouncementEndpointSettings" />
</service>
</services>
W przeciwieństwie do innych standardowych punktów końcowych używanych podczas odnajdywania należy określić powiązanie i kontrakt dla elementu DynamicEndpoint. W poniższym przykładzie pokazano, jak dodać i skonfigurować element DynamicEndpoint.
<system.serviceModel>
<client>
<endpoint kind="dynamicEndpoint" binding="basicHttpBinding" contract="IHelloWorldService" endpointConfiguration="dynamicEndpointConfiguration" />
</client>
<standardEndpoints>
<dynamicEndpoint>
<standardEndpoint name="dynamicEndpointConfiguration">
<discoveryClientSettings>
<findCriteria scopeMatchBy="http://schemas.microsoft.com/ws/2008/06/discovery/rfc" duration="00:00:10" maxResults="2">
<types>
<add name="IHelloWorldService"/>
</types>
<scopes>
<add scope="http://www.microsoft.com/building42/floor1"/>
</scopes>
<extensions>
<CustomMetadata>This is custom metadata.</CustomMetadata>
</extensions>
</findCriteria>
</discoveryClientSettings>
</standardEndpoint>
</dynamicEndpoint>
</standardEndpoints>
</system.serviceModel>
Aby uzyskać więcej informacji na temat standardowych punktów końcowych, zobacz Punkty końcowe w warstwie Standardowa.