Meta Verileri Alma
RetrieveMetadata örneği, iletişim kuracak bir uç nokta seçmek için hizmetten dinamik olarak meta verileri alan bir istemcinin nasıl uygulandığını gösterir. Bu örnek, Başlarken'i temel alır. Hizmet, bağlamayı kullanan temel adreste bir uç nokta ve bağlama kullanılarak basicHttpBinding
{baseaddress}/secure konumunda güvenli bir uç nokta olmak üzere wsHttpBinding
iki uç noktayı kullanıma sunacak şekilde değiştirildi. İstemciyi uç nokta adresleri ve bağlamalarıyla yapılandırmak yerine, istemci sınıfını kullanarak MetadataExchangeClient hizmetin meta verilerini dinamik olarak alır ve ardından meta verileri ServiceEndpointCollection sınıfını kullanarak WsdlImporter içeri aktarır.
Not
Bu örnek için kurulum yordamı ve derleme yönergeleri bu konunun sonunda yer alır.
İstemci uygulaması, hizmetle iletişim kurmak üzere istemciler oluşturmak için içeri aktarılan ServiceEndpointCollection öğesini kullanır. İstemci uygulaması, alınan her uç nokta üzerinden yinelenir ve sözleşmeyi ICalculator
uygulayan her uç noktayla iletişim kurar. Aşağıdaki örnek kodda gösterildiği gibi istemcinin her uç noktayla iletişim kuracak şekilde yapılandırılması için uygun adres ve bağlama, alınan uç noktayla birlikte sağlanır.
// Create a MetadataExchangeClient for retrieving metadata.
EndpointAddress mexAddress = new EndpointAddress(ConfigurationManager.AppSettings["mexAddress"]);
MetadataExchangeClient mexClient = new MetadataExchangeClient(mexAddress);
// Retrieve the metadata for all endpoints using metadata exchange protocol (mex).
MetadataSet metadataSet = mexClient.GetMetadata();
//Convert the metadata into endpoints.
WsdlImporter importer = new WsdlImporter(metadataSet);
ServiceEndpointCollection endpoints = importer.ImportAllEndpoints();
CalculatorClient client = null;
ContractDescription contract = ContractDescription.GetContract(typeof(ICalculator));
// Communicate with each endpoint that supports the ICalculator contract.
foreach (ServiceEndpoint ep in endpoints)
{
if (ep.Contract.Namespace.Equals(contract.Namespace) && ep.Contract.Name.Equals(contract.Name))
{
// Create a client using the endpoint address and binding.
client = new CalculatorClient(ep.Binding, new EndpointAddress(ep.Address.Uri));
Console.WriteLine("Communicate with endpoint: ");
Console.WriteLine(" AddressPath={0}", ep.Address.Uri.PathAndQuery);
Console.WriteLine(" Binding={0}", ep.Binding.Name);
// Call operations.
DoCalculations(client);
//Closing the client gracefully closes the connection and cleans up resources.
client.Close();
}
}
İstemci konsolu penceresinde, uç noktaların her birine gönderilen işlemler görüntülenir ve adres yolu ve bağlama adı görüntülenir.
Örneği ayarlamak, derlemek ve çalıştırmak için
Windows Communication Foundation Örnekleri için Tek Seferlik Kurulum Yordamı'nı gerçekleştirdiğinizden emin olun.
Çözümün C#, C++ veya Visual Basic .NET sürümünü oluşturmak için Windows Communication Foundation Örnekleri Oluşturma başlığı altındaki yönergeleri izleyin.
Örneği tek veya makineler arası bir yapılandırmada çalıştırmak için Windows Communication Foundation Örneklerini Çalıştırma başlığındaki yönergeleri izleyin.