检索元数据

RetrieveMetadata 示例演示如何实现一个客户端,它能从服务中动态检索元数据以选择用来通信的终结点。 此示例基于入门指南。 已经对服务进行了修改以公开两个终结点:一个终结点位于基址并使用 basicHttpBinding 绑定,另一个安全终结点位于 {baseaddress}/secure 并使用 wsHttpBinding 绑定。 不必使用终结点地址和绑定配置客户端,客户端可以使用 MetadataExchangeClient 类动态检索服务的元数据,然后使用 ServiceEndpointCollection 类以 WsdlImporter 的形式导入元数据。

注意

本主题的最后介绍了此示例的设置过程和生成说明。

客户端应用程序使用导入的 ServiceEndpointCollection 来创建与服务通信的客户端。 客户端应用程序会遍历每个检索到的终结点并与每个实现 ICalculator 协定的终结点通信。 会为相应的地址和绑定提供检索到的终结点,以便将客户端配置成可与每个终结点通信,如下面的示例代码所示。

// 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();
    }
}

客户端控制台窗口将显示发送到每个终结点的操作,同时显示地址路径和绑定名称。

设置、生成和运行示例

  1. 请确保已执行 Windows Communication Foundation 示例的一次性安装过程

  2. 要生成 C#、C++ 或 Visual Basic .NET 版本的解决方案,请按照生成 Windows Communication Foundation 示例中的说明进行操作。

  3. 要使用单机配置或跨计算机配置来运行示例,请按照运行 Windows Communication Foundation 示例中的说明进行操作。