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.
Windows Communication Foundation (WCF), hizmet meta verilerini dışarı aktarma, yayımlama, alma ve içeri aktarma için zengin bir altyapı sağlar. WCF hizmetleri, Svcutil.exegibi araçların hizmete erişmek için otomatik olarak istemci kodu oluşturabilmesi için hizmetin uç noktalarıyla nasıl etkileşim kurulduğunu açıklamak için meta verileri kullanır.
WCF meta veri altyapısını oluşturan türlerin çoğu ad alanında System.ServiceModel.Description bulunur.
WCF, bir hizmetteki uç noktaları açıklamak için sınıfını ServiceEndpoint kullanır. WcF kullanarak hizmet uç noktaları için meta veriler oluşturabilir veya örnek oluşturmak ServiceEndpoint üzere hizmet meta verilerini içeri aktarabilirsiniz.
WCF, bir hizmetin meta verilerini türün MetadataSet bir örneği olarak temsil eder ve yapısı WS-MetadataExchange içinde tanımlanan meta veri serileştirme biçimine kesin olarak bağlıdır. Türü MetadataSet , Web Hizmetleri Açıklama Dili (WSDL) belgeleri, XML şema belgeleri veya WS-Policy ifadeleri gibi gerçek hizmet meta verilerini örnek koleksiyonu MetadataSection olarak paketler. Her System.ServiceModel.Description.MetadataSection örnek belirli bir meta veri diyalekt ve tanımlayıcı içerir. System.ServiceModel.Description.MetadataSection özelliğinde MetadataSection.Metadata içinde aşağıdaki öğeleri barındırabilir:
Ham meta veriler.
Bir MetadataReference örnek.
Bir MetadataLocation örnek.
Örnekler System.ServiceModel.Description.MetadataReference başka bir meta veri değişimi (MEX) uç noktasına, örnekler ise System.ServiceModel.Description.MetadataLocation HTTP URL'si kullanan bir meta veri belgesine işaret eder. WCF, bir hizmet tarafından uygulanan hizmet uç noktalarını, hizmet sözleşmelerini, bağlamaları, ileti değişim düzenlerini, iletileri ve hata iletilerini açıklamak için WSDL belgelerinin kullanılmasını destekler. Hizmet tarafından kullanılan veri türleri, XML şeması kullanılarak WSDL belgelerinde açıklanmıştır. Daha fazla bilgi için Şema İçeri Aktarma ve Dışarı Aktarma bölümüne bakın. Hizmet davranışı, sözleşme davranışları ve bir hizmetin işlevselliğini genişleten bağlama öğeleri için WSDL uzantılarını dışarı ve içeri aktarmak için WCF kullanabilirsiniz. Daha fazla bilgi için bkz. WCF Uzantısı için Özel Meta Verileri Dışarı Aktarma.
Hizmet Meta Verilerini Dışarı Aktarma
WCF'de meta veri dışarı aktarma , hizmet uç noktalarını açıklama ve istemcilerin hizmetin nasıl kullanılacağını anlamak için kullanabileceği paralel, standartlaştırılmış bir gösterime yansıtma işlemidir. Örneklerden ServiceEndpoint meta verileri dışarı aktarmak için soyut sınıfın MetadataExporter bir uygulamasını kullanın. Bir System.ServiceModel.Description.MetadataExporter uygulama, bir MetadataSet örnekte kapsüllenmiş meta veriler oluşturur.
sınıfı, System.ServiceModel.Description.MetadataExporter bir uç nokta bağlamasının ve ilişkili işlemlerinin, iletilerinin ve hatalarının özelliklerini ve gereksinimlerini açıklayan ilke ifadeleri oluşturmaya yönelik bir çerçeve sağlar. Bu ilke ifadeleri bir PolicyConversionContext örneği içinde kaydedilir. Bir System.ServiceModel.Description.MetadataExporter uygulama daha sonra bu ilke ifadelerini oluşturduğu meta veriye ekleyebilir.
System.ServiceModel.Description.MetadataExporter hangi System.ServiceModel.Channels.BindingElement bağlamasında bir IPolicyExportExtension nesnesi oluşturulurken, ServiceEndpoint uygulamasının kullanımı için, PolicyConversionContext arabirimini uygulayan her System.ServiceModel.Description.MetadataExporter'e çağrılır. Yeni ilke onaylarını, IPolicyExportExtension türündeki özel uygulamalarınıza BindingElement arabirimini ekleyerek dışa aktarabilirsiniz.
türü WsdlExporter , WCF ile birlikte gelen soyut sınıfın System.ServiceModel.Description.MetadataExporter uygulamasıdır. Türü, WsdlExporter ekli ilke ifadeleriyle WSDL meta verileri oluşturur.
Hizmet uç noktasındaki uç nokta davranışları, sözleşme davranışları veya bağlama öğeleri için özel WSDL meta verilerini veya WSDL uzantılarını dışarı aktarmak için arabirimini uygulayabilirsiniz IWsdlExportExtension . WsdlExporter WSDL belgesini oluştururken, bağlama öğelerini, işlem davranışlarını, sözleşme davranışlarını ve uç nokta davranışlarını uygulayan ServiceEndpoint arabirimi için bir IWsdlExportExtension örneğine bakar.
Yayımlama Hizmeti Meta Verileri
WCF hizmetleri, bir veya daha fazla meta veri uç noktasını göstererek meta verileri yayımlar. Hizmet meta verilerini yayımlamak, hizmet meta verilerini MEX ve HTTP/GET istekleri gibi standartlaştırılmış protokoller kullanarak kullanılabilir hale getirir. Meta veri uç noktaları, adresleri, bağlamaları ve sözleşmeleri olan diğer hizmet uç noktalarına benzer. Yapılandırmada veya kodda bir hizmet konağına meta veri uç noktaları ekleyebilirsiniz.
WCF hizmetinin meta veri uç noktalarını yayımlamak için önce hizmete hizmet davranışının ServiceMetadataBehavior bir örneğini eklemeniz gerekir. Hizmetinize örnek System.ServiceModel.Description.ServiceMetadataBehavior eklemek, hizmetinizi bir veya daha fazla meta veri uç noktasını açığa çıkartarak meta veri yayımlama olanağı sağlar. Hizmet davranışını ekledikten System.ServiceModel.Description.ServiceMetadataBehavior sonra, MEX protokolunu destekleyen meta veri uç noktalarını veya HTTP/GET isteklerine yanıt veren meta veri uç noktalarını kullanıma sunun.
MEX protokolünü kullanan meta veri uç noktalarını eklemek için, hizmet barındırıcınıza IMetadataExchange adlı hizmet sözleşmesini kullanan hizmet uç noktaları ekleyin. WCF, bu hizmet sözleşmesi adına sahip olan IMetadataExchange arabirimini tanımlar. WS-MetadataExchange uç noktaları veya MEX uç noktaları, MetadataExchangeBindings sınıfındaki statik fabrika yöntemleri tarafından kullanıma sunulan dört varsayılan bağlamadan birini, Svcutil.exegibi WCF araçları tarafından kullanılan varsayılan bağlamalarla eşleştirmek için kullanabilir. Özel bağlama kullanarak MEX meta veri uç noktalarını da yapılandırabilirsiniz.
hizmetinizdeki ServiceMetadataBehavior tüm hizmet uç noktalarının meta verilerini dışarı aktarmak için bir System.ServiceModel.Description.WsdlExporter kullanır. Bir hizmetten meta verileri dışarı aktarma hakkında daha fazla bilgi için bkz. Meta Verileri Dışarı ve İçeri Aktarma.
, ServiceMetadataBehavior hizmet konağınıza uzantı olarak bir ServiceMetadataExtension örnek ekleyerek hizmet konağınızı genişleter. , System.ServiceModel.Description.ServiceMetadataExtension meta veri yayımlama protokolleri için uygulamayı sağlar. System.ServiceModel.Description.ServiceMetadataExtension özelliğine erişerek çalışma zamanında Metadata hizmetin meta verilerini almak için de kullanabilirsiniz.
Dikkat
Uygulama yapılandırma dosyanıza bir MEX uç noktası ekler ve ardından kodda hizmet konağınıza ServiceMetadataBehavior eklemeye çalışırsanız, aşağıdaki hatayı alırsınız:
System.InvalidOperationException: 'IMetadataExchange' sözleşme adı Service1 hizmeti tarafından uygulanan sözleşmeler listesinde bulunamadı. Bu sözleşmeye yönelik desteği etkinleştirmek için yapılandırma dosyasına veya ServiceHost'a doğrudan bir ServiceMetadataBehavior ekleyin.
Yapılandırma dosyasına ServiceMetadataBehavior ekleyerek veya hem uç noktayı hem de ServiceMetadataBehavior kod içerisine ekleyerek bu soruna geçici bir çözüm bulabilirsiniz.
Bir uygulama yapılandırma dosyasına ServiceMetadataBehavior eklemek örneği için bkz. Başlangıç Kılavuzu. Kodda ServiceMetadataBehavior ekleme örneği için, Self-Host örneğine bakın.
Dikkat
İkisi de aynı ada sahip bir işlem bulunan iki farklı hizmet sözleşmesini kullanıma sunan bir hizmet için meta veriler yayınlandığında bir istisna atılır. Örneğin, Get(Car c) işlemine sahip ICarService adlı bir hizmet sözleşmesini kullanıma sunan bir hizmetiniz varsa ve aynı hizmet Get(Book b) işlemine sahip IBookService adlı bir hizmet sözleşmesini kullanıma sunarsa, hizmetin meta verileri oluşturulurken bir özel durum oluşturulur veya hata iletisi görüntülenir. Bu sorunu geçici olarak çözmek için aşağıdakilerden birini yapın:
Hizmet Meta Verilerini Alma
WCF, WS-MetadataExchange ve HTTP gibi standartlaştırılmış protokolleri kullanarak hizmet meta verilerini alabilir. Her iki protokol de MetadataExchangeClient türü tarafından desteklenir. Bir adres ve isteğe bağlı bir bağlama sağlayarak System.ServiceModel.Description.MetadataExchangeClient türünü kullanarak hizmet meta verilerine erişirsiniz. Bir System.ServiceModel.Description.MetadataExchangeClient örnek tarafından kullanılan bağlama statik sınıftan gelen varsayılan bağlamalardan MetadataExchangeBindings biri, kullanıcı tarafından sağlanan bir bağlama veya sözleşme için IMetadataExchange
bir uç nokta yapılandırmasından yüklenen bağlama olabilir.
System.ServiceModel.Description.MetadataExchangeClient, HttpWebRequest türünü kullanarak HTTP URL'lerine yapılan başvuruları meta veri ile çözümleyebilir.
Varsayılan olarak, bir System.ServiceModel.Description.MetadataExchangeClient örnek tek ChannelFactoryBase bir örneğe bağlıdır. ChannelFactoryBase tarafından kullanılan System.ServiceModel.Description.MetadataExchangeClient örneğini, GetChannelFactory sanal yöntemini geçersiz kılarak değiştirebilir veya yerine başka bir şey koyabilirsiniz. Benzer şekilde, sanal System.Net.HttpWebRequest yöntemini geçersiz kılarak System.ServiceModel.Description.MetadataExchangeClient tarafından kullanılan MetadataExchangeClient.GetWebRequest örneğini değiştirerek veya yerine yenisini koyarak HTTP/GET istekleri oluşturabilirsiniz.
Svcutil.exe aracını kullanarak ve /target:metadata anahtarını ve bir adresi geçirerek WS-MetadataExchange veya HTTP/GET isteklerini kullanarak hizmet meta verilerini alabilirsiniz. Svcutil.exe belirtilen adreste meta verileri indirir ve dosyaları diske kaydeder. Svcutil.exe dahili olarak bir System.ServiceModel.Description.MetadataExchangeClient örneği kullanır ve, eğer varsa, Svcutil.exe'e geçirilen adresin düzeniyle eşleşen bir MEX uç nokta yapılandırmasını (uygulama yapılandırma dosyasından) yükler. Aksi takdirde, Svcutil.exe varsayılan olarak statik fabrika türü tarafından MetadataExchangeBindings tanımlanan bağlamalardan birini kullanır.
Hizmet Meta Verilerini İçeri Aktarma
WCF'de meta veri içeri aktarma işlemi, meta verilerinden bir hizmetin veya bileşen parçalarının soyut bir gösterimini oluşturma işlemidir. Örneğin, WCF bir hizmet için WSDL belgesinden ServiceEndpoint örneklerini, Binding örneklerini veya ContractDescription örneklerini içeri aktarabilir. WCF'de hizmet meta verilerini içeri aktarmak için soyut sınıfın MetadataImporter bir uygulamasını kullanın. sınıfından System.ServiceModel.Description.MetadataImporter türetilen türler, WCF'deki WS-Policy içeri aktarma mantığından yararlanan meta veri biçimlerini içeri aktarma desteği uygular.
Bir System.ServiceModel.Description.MetadataImporter uygulama, bir PolicyConversionContext nesnedeki hizmet meta verilerine eklenen ilke ifadelerini toplar. Bu System.ServiceModel.Description.MetadataImporter, IPolicyImportExtension özellik içindeki PolicyImportExtensions arabiriminin uygulamalarını çağırarak meta verileri içeri aktarma işleminin bir parçası olarak ilkeleri işler.
tr-TR: Yeni ilke onaylarının içeri aktarımını desteklemek için, bir System.ServiceModel.Description.MetadataImporter örneğindeki IPolicyImportExtension koleksiyonuna kendi PolicyImportExtensions arabirimi uygulamanızı ekleyebilirsiniz. Alternatif olarak, ilke içeri aktarma uzantınızı istemci uygulaması yapılandırma dosyanıza kaydedebilirsiniz.
türü System.ServiceModel.Description.WsdlImporter , WCF ile birlikte gelen soyut sınıfın System.ServiceModel.Description.MetadataImporter uygulamasıdır. System.ServiceModel.Description.WsdlImporter türü, MetadataSet nesnede paketlenmiş olan ekli ilkelerle WSDL meta verilerini içeri aktarır.
Arabirimi uygulayarak ve ardından uygulamanızı örneğinizdeki IWsdlImportExtension özelliğine ekleyerek WsdlImportExtensions üzerinde WSDL uzantılarını içeri aktarma desteği ekleyebilirsiniz. System.ServiceModel.Description.WsdlImporter, istemci uygulama yapılandırma dosyanızda kayıtlı System.ServiceModel.Description.IWsdlImportExtension arabirimi uygulamalarını da yükleyebilir.
Dinamik Bağlamalar
Uç nokta bağlamasının değişmesi veya aynı sözleşmeyi kullanan ancak farklı bir bağlamaya sahip bir uç noktaya kanal oluşturmak istemeniz durumunda hizmet uç noktasına kanal oluşturmak için kullandığınız bağlamayı dinamik olarak güncelleştirebilirsiniz. Statik sınıfını MetadataResolver kullanarak belirli bir sözleşmeyi uygulayan hizmet uç noktalarının çalışma zamanında meta verileri alabilir ve içeri aktarabilirsiniz. Ardından, istenen uç noktaya bir istemci veya kanal fabrikası oluşturmak için içeri aktarılan System.ServiceModel.Description.ServiceEndpoint nesneleri kullanabilirsiniz.