Standart Uç Noktaları Kullanma
StandardEndpoints örneği, hizmet yapılandırma dosyalarında standart uç noktaların nasıl kullanılacağını gösterir. Standart uç nokta, kullanıcının ilişkili ek özelliklerle bir adres, bağlama ve sözleşme bileşimini açıklamak için tek bir özellik kullanarak uç nokta tanımlarını basitleştirmesine olanak tanır. Bu örnek, özel bir standart uç nokta tanımlamayı ve uygulamayı ve uç noktada belirli özellikleri tanımlamayı gösterir.
Örnek Ayrıntılar
Hizmet uç noktaları üç parametre sağlanarak belirtilebilir: adres, bağlama ve sözleşme. Sağlanabilir diğer parametreler davranış yapılandırması, üst bilgiler, dinleme URI'leri vb. içerir. Bazı durumlarda, adreslerin, bağlamaların ve sözleşmelerin herhangi biri veya tümü değiştiremeyen değerlere sahiptir. Bu nedenle standart uç noktaları kullanmak mümkündür. Bu tür uç noktalara örnek olarak meta veri değişim uç noktaları ve bulma uç noktaları verilebilir. Standart uç noktalar ayrıca, hizmet uç noktalarının sabit bir şekilde bilgi sağlamak zorunda kalmadan yapılandırılmasına veya kendi standart uç noktalarını oluşturmasına izin vererek kullanılabilirliği artırır. Örneğin, makul bir varsayılan değer kümesi sağlayarak kullanılabilirliği geliştirmek ve böylece yapılandırma dosyalarının ayrıntı düzeyini azaltmak.
Bu örnek iki projeden oluşur: iki standart uç noktayı tanımlayan hizmet ve hizmetle iletişim kuran istemci. Yapılandırma dosyasındaki hizmet için standart uç noktaların tanımlanma biçimi aşağıdaki örnekte gösterilmektedir.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<extensions>
<endpointExtensions>
<add name="customEndpoint" type="Microsoft.Samples.StandardEndpoints.CustomEndpointCollectionElement, service" />
</endpointExtensions>
</extensions>
<services>
<service name="Microsoft.Samples.StandardEndpoints.CalculatorService">
<endpoint address="http://localhost:8000/Samples/Service.svc/customEndpoint" contract="Microsoft.Samples.StandardEndpoints.ICalculator" kind="customEndpoint" />
<endpoint kind="mexEndpoint" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True"/>
</behavior>
</serviceBehaviors>
</behaviors>
<standardEndpoints>
<customEndpoint>
<standardEndpoint property="True" />
</customEndpoint>
</standardEndpoints>
</system.serviceModel>
</configuration>
Hizmet için tanımlanan ilk uç nokta türündedir customEndpoint
ve tanımı özelliğine <standardEndpoints>
property
değerinin true
verildiği bölümünde görülebilir. Bu, yeni bir özellik ile özelleştirilmiş bir uç noktanın durumudur. İkinci uç nokta, adres, bağlama ve sözleşme değerlerinin sabitlendiği bir meta veri uç noktasına karşılık gelir.
Standart uç nokta öğesini tanımlamak için öğesinden StandardEndpointElement
türetilen bir sınıf oluşturulmalıdır. Bu örnekte, CustomEndpointElement
sınıfı aşağıdaki örnekte gösterildiği gibi tanımlanmıştır.
public class CustomEndpointElement : StandardEndpointElement
{
public bool Property
{
get { return (bool)base["property"]; }
set { base["property"] = value; }
}
protected override ConfigurationPropertyCollection Properties
{
get
{
ConfigurationPropertyCollection properties = base.Properties;
properties.Add(new ConfigurationProperty("property", typeof(bool), false, ConfigurationPropertyOptions.None));
return properties;
}
}
protected override Type EndpointType
{
get { return typeof(CustomEndpoint); }
}
protected override ServiceEndpoint CreateServiceEndpoint(ContractDescription contract)
{
return new CustomEndpoint();
}
protected override void OnApplyConfiguration(ServiceEndpoint endpoint, ServiceEndpointElement serviceEndpointElement)
{
CustomEndpoint customEndpoint = (CustomEndpoint)endpoint;
customEndpoint.Property = this.Property;
}
protected override void OnApplyConfiguration(ServiceEndpoint endpoint, ChannelEndpointElement channelEndpointElement)
{
CustomEndpoint customEndpoint = (CustomEndpoint)endpoint;
customEndpoint.Property = this.Property;
}
protected override void OnInitializeAndValidate(ServiceEndpointElement serviceEndpointElement)
{
}
protected override void OnInitializeAndValidate(ChannelEndpointElement channelEndpointElement)
{
}
}
işlevinde CreateServiceEndpoint
bir CustomEndpoint
nesne oluşturulur. Tanımı aşağıdaki örnekte gösterilmiştir:
public class CustomEndpoint : ServiceEndpoint
{
public CustomEndpoint()
: this(string.Empty)
{
}
public CustomEndpoint(string address)
: this(address, ContractDescription.GetContract(typeof(ICalculator)))
{
}
public CustomEndpoint(string address, ContractDescription contract)
: base(contract)
{
this.Binding = new BasicHttpBinding();
this.IsSystemEndpoint = false;
}
public bool Property
{
get;
set;
}
}
Hizmet ve istemci arasındaki iletişimi gerçekleştirmek için, istemcide hizmete bir hizmet başvurusu oluşturulur. Örnek derlenip yürütülürken, hizmet yürütülür ve istemci onunla iletişim kurar. Hizmette her değişiklik olduğunda hizmet başvurusunun güncelleştirilmesi gerektiğini unutmayın.
Bu örneği kullanmak için
Visual Studio'yu kullanarak StandardEndpoints.sln dosyasını açın.
Birden çok projenin başlatılmasını etkinleştirin.
Çözüm Gezgini'da Standart Uç Noktalar çözümüne sağ tıklayıp Özellikler'i seçin.
Ortak Özellikler'de Başlangıç Projesi'ni seçin ve birden çok Başlangıç Projesi'ne tıklayın.
Hizmet projesini listenin başına taşıyın ve Eylem Başlangıç olarak ayarlanır.
İstemci projesini Hizmet projesinden sonra, Eylem de Başlat olarak ayarlanmış şekilde taşıyın.
Bu, İstemci projesinin Hizmet projesinden sonra yürütüldüğünü belirtir.
Çözümü çalıştırmak için F5 tuşuna basın.
Not
Bu adımlar işe yaramazsa, aşağıdaki adımları kullanarak ortamınızın düzgün ayarlandığından emin olun:
- Windows Communication Foundation Örnekleri için Tek Seferlik Kurulum Yordamı'nı gerçekleştirdiğinizden emin olun.
- Çözümü oluşturmak için Windows Communication Foundation Örnekleri Oluşturma başlığındaki yönergeleri izleyin.
- Örneği tek veya birden çok bilgisayar yapılandırmasında çalıştırmak için Windows Communication Foundation Örneklerini Çalıştırma başlığındaki yönergeleri izleyin.