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.
CustomMexEndpoint örneği, meta veri alışverişi olmayan bağlamalardan birini kullanan güvenli bir meta veri uç noktası ile bir hizmetin nasıl uygulandığını ve serviceModel Meta Veri Yardımcı Programı Aracı'nın (Svcutil.exe) veya istemcilerin böyle bir meta veri uç noktasından meta verileri getirecek şekilde nasıl yapılandırıldığını gösterir. Meta veri uç noktalarının kullanıma sunulması için sistem tarafından sağlanan iki bağlama vardır: mexHttpBinding ve mexHttpsBinding. mexHttpBinding, HTTP üzerinden güvenli olmayan bir şekilde meta veri uç noktasını kullanıma açmak için kullanılır. mexHttpsBinding, HTTPS üzerinden bir meta veri uç noktasını güvenli bir şekilde kullanıma açmak için kullanılır. Bu örnek, WSHttpBinding kullanarak güvenli bir meta veri uç noktasının nasıl kullanıma sunulacağını göstermektedir. Bağlamadaki güvenlik ayarlarını değiştirmek istediğinizde bunu yapmak istersiniz, ancak HTTPS kullanmak istemezsiniz. mexHttpsBinding kullanırsanız meta veri uç noktanız güvenli olur, ancak bağlama ayarlarını değiştirmenin bir yolu yoktur.
Uyarı
Bu örnek için kurulum yordamı ve derleme yönergeleri bu konunun sonunda yer alır.
Hizmet
Bu örnekteki hizmetin iki uç noktası vardır. Uygulama uç noktası, ICalculator etkinleştirilmiş ve sertifika kullanılarak WSHttpBinding güvenliği sağlanan bir ReliableSession üzerinde Message sözleşmesine hizmet eder. Meta veri uç noktası WSHttpBinding kullanır, aynı güvenlik ayarlarıyla ancak ReliableSession olmadan. İlgili yapılandırma şu şekildedir:
<services>
<service name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
<!-- use base address provided by host -->
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration="Binding2"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
<endpoint address="mex"
binding="wsHttpBinding"
bindingConfiguration="Binding1"
contract="IMetadataExchange" />
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="Binding1">
<security mode="Message">
<message clientCredentialType="Certificate" />
</security>
</binding>
<binding name="Binding2">
<reliableSession inactivityTimeout="00:01:00" enabled="true" />
<security mode="Message">
<message clientCredentialType="Certificate" />
</security>
</binding>
</wsHttpBinding>
</bindings>
Diğer örneklerin çoğunda meta veri uç noktası, güvenli olmayan varsayılan mexHttpBindingöğesini kullanır. Burada meta veriler WSHttpBinding kullanılarak Message güvenliği ile güvence altına alınır. Meta veri istemcilerinin bu meta verileri alabilmesi için, eşleşen bir bağlama ile yapılandırılmaları gerekir. Bu örnekte bu tür iki istemci gösterilmektedir.
İlk istemci, meta verileri getirmek ve tasarım zamanında istemci kodu ve yapılandırması oluşturmak için Svcutil.exe kullanır. Hizmet meta veriler için varsayılan olmayan bir bağlama kullandığından, Svcutil.exe aracının bu bağlamayı kullanarak hizmetten meta verileri alabilmesi için özel olarak yapılandırılması gerekir.
İkinci istemci, bilinen bir sözleşmenin meta verilerini dinamik olarak almak ve ardından oluşturulan dinamik istemcide işlemleri gerçekleştirmek için MetadataResolver öğesini kullanır.
Svcutil istemcisi
Uç noktanızı IMetadataExchange barındırmak için varsayılan bağlamayı kullanırken, Svcutil.exe'ı bu uç noktanın adresiyle çalıştırabilirsiniz.
svcutil http://localhost/servicemodelsamples/service.svc/mex
ve işe yarıyor. Ancak bu örnekte, sunucu meta verileri barındırmak için varsayılan olmayan bir uç nokta kullanır. Bu nedenle Svcutil.exe'a doğru bağlamayı kullanması için talimat verilmelidir. Bu işlem bir Svcutil.exe.config dosyası kullanılarak yapılabilir.
Svcutil.exe.config dosyası normal bir istemci yapılandırma dosyasına benzer. Tek olağan dışı yönleri istemci uç noktası adı ve sözleşmesidir:
<endpoint name="http"
binding="wsHttpBinding"
bindingConfiguration="Binding1"
behaviorConfiguration="ClientCertificateBehavior"
contract="IMetadataExchange" />
Uç nokta adı, meta verilerin barındırıldığı adresin şemasının adı ve uç nokta sözleşmesi olmalıdır IMetadataExchange. Bu nedenle, Svcutil.exe aşağıdaki gibi bir komut satırıyla çalıştırıldığında:
svcutil http://localhost/servicemodelsamples/service.svc/mex
"meta veri uç noktasını ile iletişim alışverişinin bağlantı kurulumu ve davranışını yapılandırmak için "http" adlı uç noktası ve IMetadataExchange sözleşmesini arar." Örnekteki Svcutil.exe.config dosyasının geri kalanı, sunucunun meta veri uç noktası yapılandırmasıyla eşleşecek bağlama yapılandırmasını ve davranış kimlik bilgilerini belirtir.
Svcutil.exe'ın Svcutil.exe.config'da yapılandırmayı alması için Svcutil.exe yapılandırma dosyasıyla aynı dizinde olması gerekir. Sonuç olarak, Svcutil.exe yükleme konumundan Svcutil.exe.config dosyasını içeren dizine kopyalamanız gerekir. Ardından bu dizinden aşağıdaki komutu çalıştırın:
.\svcutil.exe http://localhost/servicemodelsamples/service.svc/mex
Baştaki ".\" bu dizindeki Svcutil.exe kopyasının (karşılık gelen Svcutil.exe.configolan) çalıştırılmasını sağlar.
MetadataResolver istemcisi
İstemci sözleşmeyi ve tasarım aşamasına meta verilerle nasıl etkileşim kurulacağını bilirse, uygulama uç noktalarının bağlamasını ve adresini MetadataResolver kullanarak dinamik bir şekilde bulabilir. Bu örnek istemci, nasıl oluşturulup yapılandırılacağını göstererek MetadataResolver tarafından kullanılan bağlamanın ve kimlik bilgilerinin yapılandırılmasını MetadataExchangeClient ile gösterir.
Svcutil.exe.config'de görüntülenen bağlama ve sertifika bilgileri MetadataExchangeClient üzerinde belirtilebilir.
// Specify the Metadata Exchange binding and its security mode
WSHttpBinding mexBinding = new WSHttpBinding(SecurityMode.Message);
mexBinding.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;
// Create a MetadataExchangeClient for retrieving metadata, and set the // certificate details
MetadataExchangeClient mexClient = new MetadataExchangeClient(mexBinding);
mexClient.SoapCredentials.ClientCertificate.SetCertificate( StoreLocation.CurrentUser, StoreName.My,
X509FindType.FindBySubjectName, "client.com");
mexClient.SoapCredentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.PeerOrChainTrust;
mexClient.SoapCredentials.ServiceCertificate.SetDefaultCertificate( StoreLocation.CurrentUser, StoreName.TrustedPeople,
X509FindType.FindBySubjectName, "localhost");
mexClient yapılandırıldığında ilgilendiğimiz sözleşmeleri numaralandırabilir ve bu sözleşmelerle uç noktaların listesini getirmek için kullanabilirizMetadataResolver:
// The contract we want to fetch metadata for
Collection<ContractDescription> contracts = new Collection<ContractDescription>();
ContractDescription contract = ContractDescription.GetContract(typeof(ICalculator));
contracts.Add(contract);
// Find endpoints for that contract
EndpointAddress mexAddress = new EndpointAddress(ConfigurationManager.AppSettings["mexAddress"]);
ServiceEndpointCollection endpoints = MetadataResolver.Resolve(contracts, mexAddress, mexClient);
Son olarak, uygulama uç noktalarıyla iletişim kanalları oluşturmak için kullanılan ChannelFactory bağlantısını ve adresi başlatmak amacıyla bu uç noktalardan aldığımız bilgileri kullanabiliriz.
ChannelFactory<ICalculator> cf = new ChannelFactory<ICalculator>(endpoint.Binding, endpoint.Address);
Bu örnek istemcinin temel noktası, kullanıyorsanız MetadataResolverve meta veri değişimi iletişimi için özel bağlamalar veya davranışlar belirtmeniz gerekiyorsa, bu özel ayarları belirtmek için bir MetadataExchangeClient kullanabileceğinizi göstermektir.
Örneği ayarlamak ve derlemek için
Windows Communication Foundation Örnekleri içinOne-Time Kurulum Yordamını yaptığınızdan emin olun.
Çözümü oluşturmak için Windows Communication Foundation Örnekleri Oluşturma başlığındaki yönergeleri izleyin.
Örneği aynı makinede çalıştırmak için
Örnek yükleme klasöründen Setup.bat çalıştırın. Bu, örneği çalıştırmak için gereken tüm sertifikaları yükler. Setup.bat'in, Windows Communication Foundation Örnekleri içinOne-Time Kurulum Yordamı kapsamında setupCertTool.bat'i çalıştırarak yüklenen FindPrivateKey.exe aracını kullandığına dikkat edin.
İstemci uygulamasını \MetadataResolverClient\bin veya \SvcutilClient\bin konumundan çalıştırın. İstemci etkinliği, istemci konsol uygulamasında görüntülenir.
İstemci ve hizmet iletişim kuramıyorsa bkz. WCF Örnekleri için Sorun Giderme İpuçları.
Örnekle işiniz bittiğinde Cleanup.bat çalıştırarak sertifikaları kaldırın. Diğer güvenlik örnekleri aynı sertifikaları kullanır.
Örnek kodu makineler arasında çalıştırmak için
sunucusunda
setup.bat serviceçalıştırın. bağımsız değişkeniylesetup.batçalıştırmakservice, makinenin tam etki alanı adına sahip bir hizmet sertifikası oluşturur ve hizmet sertifikasını Service.cer adlı bir dosyaya aktarır.Sunucuda, Web.config yeni sertifika adını yansıtacak şekilde düzenleyin. Diğer bir ifadeyle,
findValueözniteliğini <serviceCertificate> öğesindeki makinenin tam etki alanı adıyla değiştirin.Service.cer dosyasını hizmet dizininden istemci makinesindeki istemci dizinine kopyalayın.
İstemcide
setup.bat clientçalıştırın.setup.batöğesiniclientbağımsız değişkeniyle çalıştırmak, Client.com adlı bir istemci sertifikası oluşturur ve istemci sertifikasını Client.cer adlı bir dosyaya aktarır.İstemci makinesindeki öğesinin
MetadataResolverClientApp.config dosyasında, mex uç noktasının adres değerini hizmetinizin yeni adresiyle eşleşecek şekilde değiştirin. Bunu, localhost'u sunucunun tamamen nitelikli etki alanı adıyla değiştirerek yaparsınız. Ayrıca metadataResolverClient.cs dosyasındaki "localhost" örneğini yeni hizmet sertifikası adıyla (sunucunun tam etki alanı adı) değiştirin. SvcutilClient projesinin App.config için de aynı şeyi yapın.Client.cer dosyasını istemci dizininden sunucudaki hizmet dizinine kopyalayın.
İstemcide
ImportServiceCert.batçalıştırın. Bu, hizmet sertifikasını Service.cer dosyasından CurrentUser - TrustedPeople deposuna aktarır.sunucusunda
ImportClientCert.batkomutunu çalıştırın. Bu, istemci sertifikasını Client.cer dosyasından LocalMachine - TrustedPeople deposuna aktarır.Hizmet makinesinde, Hizmet projesini Visual Studio'da derleyin ve çalıştığını doğrulamak için web tarayıcısında yardım sayfasını seçin.
İstemci makinesinde MetadataResolverClient veya VS'den SvcutilClient'ı çalıştırın.
- İstemci ve hizmet iletişim kuramıyorsa bkz. WCF Örnekleri için Sorun Giderme İpuçları.
Örnekten sonra temizlik yapmak için
Örneği çalıştırmayı bitirdikten sonra örnekler klasöründe Cleanup.bat çalıştırın.
Uyarı
Bu betik, bu örneği makineler arasında çalıştırırken istemcideki hizmet sertifikalarını kaldırmaz. Makineler arasında sertifika kullanan Windows Communication Foundation (WCF) örnekleri çalıştırdıysanız CurrentUser - TrustedPeople deposuna yüklenmiş hizmet sertifikalarını temizlediğinizden emin olun. Bunu yapmak için şu komutu kullanın:
certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>. Örneğin:certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com.