Aracılığıyla paylaş


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" üzerine kurulmuştur. Hizmet, bağlamayı kullanan temel adreste bir uç nokta ve basicHttpBinding bağlamayı kullanan {baseaddress}/secure konumunda güvenli bir uç nokta olmak üzere iki uç noktayı kullanıma sunacak biçimde değiştirildi. İstemciyi uç nokta adresleri ve bağlamalarıyla yapılandırmak yerine, MetadataExchangeClient sınıfını kullanarak hizmetin meta verilerini dinamik olarak alır ve ardından ServiceEndpointCollection sınıfını kullanarak meta verilerini WsdlImporter olarak içeri aktarır.

Uyarı

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ı, her alınan uç noktayı yineleyerek ICalculator sözleşmesini 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

  1. Windows Communication Foundation Örnekleri içinOne-Time Kurulum Yordamını yaptığınızdan emin olun.

  2. Çö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.

  3. Örneği tek bir makine veya makineler arası bir yapılandırmada çalıştırmak için, Windows Communication Foundation örneklerini çalıştırmayönergelerini izleyin.