Yapılandırma Örneği
Yapılandırma örneği , bir hizmeti bulunabilir hale getirmek için yapılandırma dosyasının kullanımını gösterir.
Hizmet Yapılandırması
Bu örnekteki yapılandırma dosyasında iki özellik gösterilmektedir:
Hizmeti standart UdpDiscoveryEndpointüzerinden bulunabilir hale getirme.
Hizmetin uygulama uç noktası için bulmayla ilgili bilgileri ayarlama ve standart uç noktada bulmayla ilgili bazı ayarları yapma.
Bulmayı etkinleştirmek için hizmetin uygulama yapılandırma dosyasında birkaç değişiklik yapılması gerekir:
öğesine bir bulma uç noktası eklenmelidir
<service>
. Bu standart UdpDiscoveryEndpoint bir uç noktadır. Bu, çalışma zamanının bulma hizmetiyle ilişkilendirtiği bir sistem uç noktasıdır. Bulma hizmeti bu uç noktadaki iletileri dinler.Bölümüne bir
<serviceDiscovery>
davranış eklenir<serviceBehaviors>
. Bu, hizmetin çalışma zamanında bulunmasını sağlar ve bulma veResolve
iletileri dinlemek içinProbe
daha önce bahsedilen bulma uç noktasını kullanır. Bu iki ekleme ile hizmet, belirtilen bulma uç noktasında bulunabilir.
Aşağıdaki yapılandırma parçacığında uygulama uç noktası ve bulma uç noktası tanımlanmış bir hizmet gösterilmektedir:
<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>
Duyurulardan yararlanmak için bir duyuru uç noktası eklemeniz gerekir. Bunu yapmak için yapılandırma dosyasını aşağıdaki kodda gösterildiği gibi değiştirin.
<serviceDiscovery>
<announcementEndpoints>
<endpoint kind="udpAnnouncementEndpoint"/>
</announcementEndpoints>
</serviceDiscovery>
Bulma hizmeti davranışına duyuru uç noktası eklemek, hizmet için varsayılan bir duyuru istemcisi oluşturur. Bu, hizmet sırasıyla açıldığında ve kapatıldığında hizmetin çevrimiçi ve çevrimdışı duyuru göndermesini garanti eder.
Bu yapılandırma dosyası, ek davranışları değiştirerek yalnızca bu basit adımların ötesine geçer. Bulmayla ilgili bilgileri belirli uç noktaları kullanarak denetlemek mümkündür. Başka bir ifadeyle, kullanıcı uç nokta bulunup bulunamayacağını denetleyebileceği gibi, bu uç noktayı ve özel XML meta verileriyle Scopes de işaretleyebilir. Bunu yapmak için kullanıcının uygulama uç noktasına bir behaviorConfiguration
özellik eklemesi gerekir. Bu durumda, aşağıdaki özellik uygulama uç noktasına eklenir.
behaviorConfiguration="endpointBehaviorConfiguration"
Artık davranış yapılandırma öğesi aracılığıyla bulmayla ilgili öznitelikleri denetleyebilirsiniz. Bu durumda, uygulama uç noktasına iki kapsam eklenir.
<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>
Kapsamlar hakkında daha fazla bilgi için bkz . Bulma Bul ve BulCriteria.
Bulma uç noktasının belirli ayrıntılarını da denetleyebilirsiniz. Bu işlem aracılığıyla StandardEndpointsSectionyapılır. Bu örnekte, kullanılan protokolün sürümü değiştirilir ve aşağıdaki kod örneğinde gösterildiği gibi bir maxResponseDelay
öznitelik eklenir.
<standardEndpoints>
<udpDiscoveryEndpoint>
<standardEndpoint name="adhocDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11" maxResponseDelay="00:00:00.600" />
</udpDiscoveryEndpoint>
</standardEndpoints>
Bu örnekte kullanılan yapılandırma dosyasının tamamı aşağıda verilmiştir:
<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>
İstemci Yapılandırması
İstemcinin uygulama yapılandırma dosyasında, aşağıdaki yapılandırma kod parçacığında gösterildiği gibi bulma kullanmak için bir standardEndpoint
tür dynamicEndpoint
kullanılır.
<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>
İstemci bir dynamicEndpoint
kullandığında, çalışma zamanı bulma işlemini otomatik olarak gerçekleştirir. Bulma sırasında, kullanılacak bulma uç noktasının türünü belirten bölümünde tanımlananlar discoveryClientSettings
gibi çeşitli ayarlar kullanılır:
<endpoint kind="udpDiscoveryEndpoint" endpointConfiguration="adhocDiscoveryEndpointConfiguration" />
Hizmetleri aramak için kullanılan bulma ölçütleri:
<!-- 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>
Bu örnek, bu özelliği genişletir ve istemci tarafından kullanılan özelliklerin yanı sıra bulma için kullanılan standardın updDiscoveryEndpoint
bazı özelliklerini değiştirirFindCriteria. FindCriteria, bir kapsam ve belirli scopeMatchBy
bir algoritmanın yanı sıra özel sonlandırma ölçütlerini kullanacak şekilde değiştirilir. Ayrıca örnek, istemcinin iletileri kullanarak Probe
XML öğelerini nasıl gönderebileceğini de gösterir. Son olarak, aşağıdaki yapılandırma dosyasında gösterildiği gibi kullanılan protokolün sürümü ve UDP'ye UdpDiscoveryEndpointözgü ayarlar gibi bazı değişiklikler yapılır.
<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>
Aşağıda, örnekte kullanılan tam istemci yapılandırması verilmiştir.
<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>
Bu örneği kullanmak için
Bu örnek HTTP uç noktalarını kullanır ve bu örneği çalıştırmak için uygun URL ACL'lerinin eklenmesi gerekir. Daha fazla bilgi için bkz . HTTP ve HTTPS'yi yapılandırma. Yükseltilmiş bir ayrıcalıkta aşağıdaki komutun yürütülmesi uygun ACL'leri eklemelidir. Komut olduğu gibi çalışmazsa, Etki Alanı ve Kullanıcı Adınızı aşağıdaki bağımsız değişkenlerle değiştirmek isteyebilirsiniz.
netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%
Çözümü oluşturun.
Derleme dizininden hizmet yürütülebilir dosyasını çalıştırın.
İstemci yürütülebilir dosyasını çalıştırın. İstemcinin hizmeti bulabileceğini unutmayın.