Detectie configureren in een configuratiebestand
Er zijn vier belangrijke groepen configuratie-instellingen die worden gebruikt voor detectie. In dit onderwerp wordt elk kort beschreven en ziet u voorbeelden van hoe u deze configureert. Na elke sectie ziet u een koppeling naar uitgebreidere documentatie over elk gebied.
Gedragsconfiguratie
Detectie maakt gebruik van servicegedrag en eindpuntgedrag. Het ServiceDiscoveryBehavior gedrag maakt detectie mogelijk voor alle eindpunten van een service en stelt u in staat om aankondigingseindpunten op te geven. In het volgende voorbeeld ziet u hoe u het eindpunt van een ServiceDiscoveryBehavior aankondiging toevoegt en opgeeft.
<behaviors>
<serviceBehaviors>
<behavior name="helloWorldServiceBehavior">
<serviceDiscovery>
<announcementEndpoints>
<endpoint kind="udpAnnouncementEndpoint"/>
</announcementEndpoints>
</serviceDiscovery>
</behavior>
</serviceBehaviors>
</behaviors>
Nadat u het gedrag hebt opgegeven, kunt u ernaar verwijzen vanuit een <service>
element, zoals wordt weergegeven in het volgende voorbeeld.
<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>
Als u een service wilt detecteren, moet u ook een detectie-eindpunt toevoegen. In het bovenstaande voorbeeld wordt een UdpDiscoveryEndpoint standaardeindpunt toegevoegd.
Wanneer u aankondigingseindpunten toevoegt, moet u ook een aankondigingslistenerservice toevoegen aan het <services>
element, zoals wordt weergegeven in het volgende voorbeeld.
<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>
Het EndpointDiscoveryBehavior gedrag wordt gebruikt om detectie van een specifiek eindpunt in of uit te schakelen. In het volgende voorbeeld wordt een service geconfigureerd met twee toepassingseindpunten, één met detectie ingeschakeld en één met detectie uitgeschakeld. Voor elk eindpunt wordt een EndpointDiscoveryBehavior gedrag toegevoegd.
<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>
Het EndpointDiscoveryBehavior gedrag kan ook worden gebruikt om aangepaste metagegevens toe te voegen aan de eindpuntmetagegevens die door de service worden geretourneerd. In het volgende voorbeeld ziet u hoe u dit doet.
<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>
Het EndpointDiscoveryBehavior gedrag kan ook worden gebruikt om bereiken en typen toe te voegen die clients gebruiken om te zoeken naar services. In het volgende voorbeeld ziet u hoe u dit doet in een configuratiebestand aan de clientzijde.
<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>
Zie voor meer informatie over ServiceDiscoveryBehavior WCF EndpointDiscoveryBehavior Discovery Overview.
Configuratie van bindingselement
De configuratie van bindingselementen is het meest interessant aan de clientzijde. U kunt de configuratie gebruiken om de zoekcriteria op te geven die worden gebruikt om services te detecteren vanuit een WCF-clienttoepassing. In het volgende voorbeeld wordt een aangepaste binding met het DiscoveryClient kanaal gemaakt en worden zoekcriteria opgegeven die een type en bereik bevatten. Daarnaast worden waarden voor de Duration en MaxResults eigenschappen opgegeven.
<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>
Naar deze aangepaste bindingsconfiguratie moet worden verwezen door een clienteindpunt:
<client>
<endpoint address="http://schemas.microsoft.com/discovery/dynamic"
binding="customBinding"
bindingConfiguration="discoBindingConfiguration"
contract="IHelloWorldService" />
</client>
Zie Discovery Find en FindCriteria voor meer informatie over zoekcriteria. Zie overzicht van WCF-detectie voor meer informatie over detectie- en bindingselementen
Standaardeindpuntconfiguratie
Standaardeindpunten zijn vooraf gedefinieerde eindpunten met standaardwaarden voor een of meer eigenschappen (adres, binding of contract) of een of meer eigenschapswaarden die niet kunnen worden gewijzigd. .NET 4 wordt geleverd met drie detectiegerelateerde standaardeindpunten: UdpDiscoveryEndpoint, UdpAnnouncementEndpointen DynamicEndpoint. Het UdpDiscoveryEndpoint is een standaardeindpunt dat vooraf is geconfigureerd voor detectiebewerkingen via een UDP multicast-binding. Het UdpAnnouncementEndpoint is een standaardeindpunt dat vooraf is geconfigureerd voor het verzenden van aankondigingsberichten via een UDP-binding. Het DynamicEndpoint is een standaardeindpunt dat gebruikmaakt van detectie om het eindpuntadres van een gedetecteerde service dynamisch te vinden tijdens runtime. Standaardbindingen worden opgegeven met een <endpoint>
element dat type kenmerk bevat dat het type standaardeindpunt heeft opgegeven dat moet worden toegevoegd. In het volgende voorbeeld ziet u hoe u een UdpDiscoveryEndpoint en een UdpAnnouncementEndpoint.
<services>
<service name="HelloWorldService">
<!-- ... -->
<endpoint kind="udpDiscoveryEndpoint" />
</service>
<service name="AnnouncementListener">
<endpoint kind="udpAnnouncementEndpoint" />
</service>
</services>
Standaardeindpunten worden geconfigureerd in een <standardEndpoints>
element. In het volgende voorbeeld ziet u hoe u de UdpDiscoveryEndpoint en de 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>
Zodra u de standaardeindpuntconfiguratie hebt toegevoegd, verwijst u naar de configuratie in het <endpoint>
element voor elk eindpunt, zoals wordt weergegeven in het volgende voorbeeld.
<services>
<service name="HelloWorldService">
<!-- ... -->
<endpoint kind="udpDiscoveryEndpoint" endpointConfiguration="udpDiscoveryEndpointSettings"/>
</service>
<service name="AnnouncementListener">
<endpoint kind="udpAnnouncementEndpoint" endpointConfiguration="udpAnnouncementEndpointSettings" />
</service>
</services>
In tegenstelling tot de andere standaardeindpunten die in detectie worden gebruikt, geeft u een binding en contract voor DynamicEndpointop. In het volgende voorbeeld ziet u hoe u een 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>
Zie Standard-eindpunten voor meer informatie over standaardeindpunten.