Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu konuda bağlamalar ve bağlama öğeleri için yapılandırma ve meta veri desteğinin nasıl etkinleştirileceği açıklanır.
Yapılandırmaya ve Meta Veriye Genel Bakış
Bu konu başlığında, Kanal Geliştirme görev listesindeki isteğe bağlı 1, 2 ve 4 öğeleri olan aşağıdaki görevler açıklanmaktadır .
Bağlama öğesi için yapılandırma dosyası desteğini etkinleştirme.
Bağlama için yapılandırma dosyası desteğini etkinleştirme.
Bağlama öğesi için WSDL ve politikası ifadeleri dışa aktarıyor.
Bağlantınızı veya bağlantı öğenizi eklemek ve yapılandırmak için WSDL ve politikanın iddialarını belirleme.
Kullanıcı tanımlı bağlamalar ve bağlama öğeleri oluşturma hakkında bilgi için bkz. Sırasıyla User-Defined Bağlamaları Oluşturma ve BindingElement Oluşturma.
Yapılandırma Desteği Ekleme
Bir kanal için yapılandırma dosyası desteğini etkinleştirmek için, bağlama öğeleri için yapılandırma desteğini etkinleştiren System.ServiceModel.Configuration.BindingElementExtensionElement ve bağlamalar için yapılandırma desteğine olanak tanıyan System.ServiceModel.Configuration.StandardBindingElement ve System.ServiceModel.Configuration.StandardBindingCollectionElement<TStandardBinding,TBindingConfiguration> olmak üzere iki yapılandırma bölümü uygulamanız gerekir.
Bunu gerçekleştirmenin daha kolay bir yolu, bağlamalarınız ve bağlama öğeleriniz için yapılandırma kodu oluşturmak üzere ConfigurationCodeGenerator örnek aracını kullanmaktır.
BindingElementExtensionElement'i Genişletme
Aşağıdaki örnek kod Aktarım: UDP örneğinden alınmıştır.
UdpTransportElement, BindingElementExtensionElement 'yi yapılandırma sistemine kullanıma sunan bir UdpTransportBindingElement 'dir. Birkaç temel geçersiz kılma ile örnek yapılandırma bölümü adını, bağlama öğesinin türünü ve bağlama öğesinin nasıl oluşturulacağını tanımlar. Kullanıcılar daha sonra uzantı bölümünü aşağıdaki gibi bir yapılandırma dosyasına kaydedebilir.
<configuration>
<system.serviceModel>
<extensions>
<bindingElementExtensions>
<add name="udpTransport" type="Microsoft.ServiceModel.Samples.UdpTransportElement, UdpTransport" />
</bindingElementExtensions>
</extensions>
</system.serviceModel>
</configuration>
Uzantıya, aktarım olarak UDP kullanmak için özel bağlamalardan başvurulabilir.
<configuration>
<system.serviceModel>
<bindings>
<customBinding>
<binding configurationName="UdpCustomBinding">
<udpTransport/>
</binding>
</customBinding>
</bindings>
</system.serviceModel>
</configuration>
Bağlama için Yapılandırma Ekleme
Bölüm SampleProfileUdpBindingCollectionElement, StandardBindingCollectionElement<TStandardBinding,TBindingConfiguration>'yi yapılandırma sistemine tanıtan bir SampleProfileUdpBinding'dır. Uygulamanın büyük bir kısmı, SampleProfileUdpBindingConfigurationElement'den türetilen StandardBindingElement'a devredildi.
SampleProfileUdpBindingConfigurationElement üzerinde, SampleProfileUdpBinding üzerindeki özelliklere karşılık gelen özellikler ve ConfigurationElement bağlamasından eşlemek için işlevler bulunmaktadır. Son olarak, aşağıdaki örnek kodda gösterildiği gibi OnApplyConfiguration yöntemi SampleProfileUdpBinding içinde geçersiz kılınmıştır.
protected override void OnApplyConfiguration(string configurationName)
{
if (binding == null)
throw new ArgumentNullException("binding");
if (binding.GetType() != typeof(SampleProfileUdpBinding))
{
var expectedType = typeof(SampleProfileUdpBinding).AssemblyQualifiedName;
var typePassedIn = binding.GetType().AssemblyQualifiedName;
throw new ArgumentException($"Invalid type for binding. Expected type: {expectedType}. Type passed in: {typePassedIn}.");
}
SampleProfileUdpBinding udpBinding = (SampleProfileUdpBinding)binding;
udpBinding.OrderedSession = this.OrderedSession;
udpBinding.ReliableSessionEnabled = this.ReliableSessionEnabled;
udpBinding.SessionInactivityTimeout = this.SessionInactivityTimeout;
if (this.ClientBaseAddress != null)
udpBinding.ClientBaseAddress = ClientBaseAddress;
}
Bu işleyiciyi yapılandırma sistemine kaydetmek için aşağıdaki bölümü ilgili yapılandırma dosyasına ekleyin.
<configuration>
<configSections>
<sectionGroup name="system.serviceModel">
<sectionGroup name="bindings">
<section name="sampleProfileUdpBinding" type="Microsoft.ServiceModel.Samples.SampleProfileUdpBindingCollectionElement, UdpTransport" />
</sectionGroup>
</sectionGroup>
</configSections>
</configuration>
Ardından system.serviceModel< yapılandırma bölümünden> başvurulabilir.
<configuration>
<system.serviceModel>
<client>
<endpoint configurationName="calculator"
address="soap.udp://localhost:8001/"
bindingConfiguration="CalculatorServer"
binding="sampleProfileUdpBinding"
contract= "Microsoft.ServiceModel.Samples.ICalculatorContract">
</endpoint>
</client>
</system.serviceModel>
</configuration>
Bağlama Öğesi için Meta Veri Desteği Ekleme
Bir kanalı meta veri sistemiyle tümleştirmek için ilkenin hem içeri hem de dışarı aktarılmasını desteklemesi gerekir. Bu, ServiceModel Meta Veri Yardımcı Programı Aracı (Svcutil.exe) gibi araçların bağlama öğesinin istemcilerini oluşturmasına olanak tanır.
WSDL Desteği Ekleme
Bağlamadaki aktarım bağlama öğesi, meta verilerdeki adresleme bilgilerini dışarı ve içeri aktarmakla sorumludur. SOAP bağlaması kullanılırken, aktarım bağlama öğesi de meta verilerde doğru bir aktarım URI'sini dışarı aktarmalıdır. Aşağıdaki örnek kod Aktarım: UDP örneğinden alınmıştır.
WSDL Dışarı Aktarma
Adresleme bilgilerini dışa aktarmak için UdpTransportBindingElement, System.ServiceModel.Description.IWsdlExportExtension arabirimini uygular. yöntemi WSDL IWsdlExportExtension.ExportEndpoint bağlantı noktasına doğru adresleme bilgilerini ekler.
if (context.WsdlPort != null)
{
AddAddressToWsdlPort(context.WsdlPort, context.Endpoint.Address, encodingBindingElement.MessageVersion.Addressing);
}
UdpTransportBindingElement Yöntemin ExportEndpoint uygulanması, uç nokta BIR SOAP bağlaması kullandığında bir aktarım URI'sini de dışarı aktarır:
WsdlNS.SoapBinding soapBinding = GetSoapBinding(context, exporter);
if (soapBinding != null)
{
soapBinding.Transport = UdpPolicyStrings.UdpNamespace;
}
WSDL İçeri Aktarma
WSDL içeri aktarma sistemini adresleri içeri aktarmayı işleyecek şekilde genişletmek için, Svcutil.exe.config dosyasında gösterildiği gibi Svcutil.exe için yapılandırma dosyasına aşağıdaki yapılandırmayı ekleyin:
<configuration>
<system.serviceModel>
<client>
<metadata>
<wsdlImporters>
<extension type=" Microsoft.ServiceModel.Samples.UdpBindingElementImporter, UdpTransport" />
</wsdlImporters>
</metadata>
</client>
</system.serviceModel>
</configuration>
Svcutil.exeçalıştırıldığında, WSDL içeri aktarma uzantılarını yüklemek amacıyla Svcutil.exe almak için iki seçenek vardır.
SvcutilConfig:/< dosyasını kullanarak Svcutil.exe yapılandırma dosyasına işaret edin.
yapılandırma bölümünü Svcutil.exeile aynı dizindeki Svcutil.exe.config ekleyin.
UdpBindingElementImporter türü System.ServiceModel.Description.IWsdlImportExtension arabirimini uygular. yöntemi WSDL ImportEndpoint bağlantı noktasından adresi içeri aktarır:
BindingElementCollection bindingElements = context.Endpoint.Binding.CreateBindingElements();
TransportBindingElement transportBindingElement = bindingElements.Find<TransportBindingElement>();
if (transportBindingElement is UdpTransportBindingElement)
{
ImportAddress(context);
}
Politika Desteği Ekleme
Özel bağlama öğesi, bir hizmet uç noktası için WSDL bağlamasında ilke onaylarını dışarı aktararak bu bağlama öğesinin özelliklerini ifade edebilir. Aşağıdaki örnek kod Aktarım: UDP örneğinden alınmıştır.
Politika Dışa Aktarma
Bu UdpTransportBindingElement türü, politika dışarı aktarma desteği eklemek için System.ServiceModel.Description.IPolicyExportExtension uygular. Sonuç olarak, System.ServiceModel.Description.MetadataExporter ilkeyi içeren UdpTransportBindingElement tüm bağlamalar için ilkenin oluşturulmasını içerir.
IPolicyExportExtension.ExportPolicy içinde, UDP için bir onay ekleyin ve kanal çok noktaya yayın modundaysa başka bir onay ekleyin. Çünkü çok noktaya yayın modu, iletişim yığınının nasıl yapılandırılacağını etkiler ve bu nedenle her iki taraf arasında eşgüdümlü olmalıdır.
ICollection<XmlElement> bindingAssertions = context.GetBindingAssertions();
XmlDocument xmlDocument = new XmlDocument();
bindingAssertions.Add(xmlDocument.CreateElement(
UdpPolicyStrings.Prefix, UdpPolicyStrings.TransportAssertion, UdpPolicyStrings.UdpNamespace));
if (Multicast)
{
bindingAssertions.Add(xmlDocument.CreateElement(
UdpPolicyStrings.Prefix, UdpPolicyStrings.MulticastAssertion, UdpPolicyStrings.UdpNamespace));
}
Özel aktarım bağlama öğeleri adresleme işlemiyle yükümlü olduğundan, System.ServiceModel.Description.IPolicyExportExtension üzerindeki UdpTransportBindingElement uygulaması, kullanılmakta olan WS-Addressing sürümünü belirtmek için uygun WS-Addressing ilkesi koşullarını da dışarı aktarmaktan sorumludur.
AddWSAddressingAssertion(context, encodingBindingElement.MessageVersion.Addressing);
Politika İçe Aktarma
İlke içeri aktarma sistemini genişletmek için, Svcutil.exe.config dosyasında gösterildiği gibi Svcutil.exe yapılandırma dosyasına aşağıdaki yapılandırmayı ekleyin:
<configuration>
<system.serviceModel>
<client>
<metadata>
<policyImporters>
<extension type=" Microsoft.ServiceModel.Samples.UdpBindingElementImporter, UdpTransport" />
</policyImporters>
</metadata>
</client>
</system.serviceModel>
</configuration>
Ardından kayıtlı sınıfımızdan (System.ServiceModel.Description.IPolicyImportExtension) UdpBindingElementImporter uygularız.
IPolicyImportExtension.ImportPolicy içinde, uygun ad alanında doğrulamaları inceleyin ve aktarımı oluşturma ve çok noktaya yayın olup olmadığını denetleme işlemleri için olanları işleyin. Ayrıca, içeri aktarıcının işlediği iddiaları bağlayıcı iddialar listesinden kaldırın. Yine, Svcutil.exeçalıştırırken iki tümleştirme seçeneği vardır.
/SvcutilConfig:<file> dosyasını kullanarak yapılandırma dosyamıza Svcutil.exe işaret edin.
yapılandırma bölümünü Svcutil.exeile aynı dizindeki Svcutil.exe.config ekleyin.
Özel bir Standart Bağlama İçeri Aktarıcı Ekleme
Svcutil.exe ve System.ServiceModel.Description.WsdlImporter türü varsayılan olarak sistem tarafından sağlanan bağlamaları tanır ve içeri aktarır. Aksi takdirde bağlama örnek System.ServiceModel.Channels.CustomBinding olarak içeri aktarılır. Svcutil.exe ve WsdlImporter'nın SampleProfileUdpBinding içe aktarmasını etkinleştirmek için, UdpBindingElementImporter ayrıca özel bir standart bağlama içeri aktarıcı olarak görev yapar.
Özel bir standart bağlama içeri aktarıcısı, ImportEndpoint arabirimindeki System.ServiceModel.Description.IWsdlImportExtension yöntemini uygulayarak, meta verilerden içeri aktarılan System.ServiceModel.Channels.CustomBinding örneğini inceleyip belirli bir standart bağlama tarafından oluşturulup oluşturulmadığını görmek için kullanır.
if (context.Endpoint.Binding is CustomBinding)
{
Binding binding;
if (transportBindingElement is UdpTransportBindingElement)
{
//if TryCreate is true, the CustomBinding will be replace by a SampleProfileUdpBinding in the
//generated config file for better typed generation.
if (SampleProfileUdpBinding.TryCreate(bindingElements, out binding))
{
binding.Name = context.Endpoint.Binding.Name;
binding.Namespace = context.Endpoint.Binding.Namespace;
context.Endpoint.Binding = binding;
}
}
}
Genel olarak, özel bir standart bağlama içeri aktarıcısı uygulamak, yalnızca standart bağlama tarafından ayarlanmış olabilecek özelliklerin değiştiğini ve diğer tüm özelliklerin varsayılanları olduğunu doğrulamak için içeri aktarılan bağlama öğelerinin özelliklerini denetlemeyi içerir. Standart bağlama içeri aktarıcısı uygulamak için temel bir strateji, standart bağlamanın bir örneğini oluşturmak, bağlama öğelerinden standart bağlamanın desteklediği standart bağlama örneğine özellikleri yaymak ve standart bağlamadaki bağlama öğelerini içeri aktarılan bağlama öğeleriyle karşılaştırmaktır.