MetadataResolver.Resolve 方法

定义

下载元数据地址并将其解析为该服务的 ServiceEndpoint 对象。

重载

Resolve(IEnumerable<ContractDescription>, EndpointAddress)

使用指定元数据地址,将元数据地址解析为指定协定的 ServiceEndpoint 对象。

Resolve(Type, EndpointAddress)

下载元数据地址并将其解析为指定地址处的指定协定的 ServiceEndpoint 对象的集合。

Resolve(IEnumerable<ContractDescription>, EndpointAddress, MetadataExchangeClient)

使用指定元数据地址和 ServiceEndpoint,将元数据地址解析为指定协定的 MetadataExchangeClient 对象。

Resolve(IEnumerable<ContractDescription>, Uri, MetadataExchangeClientMode)

使用指定地址和传输模式,将元数据地址解析为指定协定的 ServiceEndpoint 对象。

Resolve(Type, Uri, MetadataExchangeClientMode)

使用指定地址和传输模式,将元数据地址解析为指定协定的 ServiceEndpoint 对象。

Resolve(IEnumerable<ContractDescription>, Uri, MetadataExchangeClientMode, MetadataExchangeClient)

使用指定地址、传输模式和传输客户端,将元数据地址解析为指定协定的 ServiceEndpoint 对象。

注解

若要下载元数据,而不是将信息解析为 ServiceEndpoint 对象,请直接使用 System.ServiceModel.Description.MetadataExchangeClient

对于所有同步和异步 Resolve 方法,如果未导入终结点或没有与约定相匹配的终结点,则返回空集合。 如果返回了空集合,则写入一个警告跟踪。

Resolve(IEnumerable<ContractDescription>, EndpointAddress)

使用指定元数据地址,将元数据地址解析为指定协定的 ServiceEndpoint 对象。

public:
 static System::ServiceModel::Description::ServiceEndpointCollection ^ Resolve(System::Collections::Generic::IEnumerable<System::ServiceModel::Description::ContractDescription ^> ^ contracts, System::ServiceModel::EndpointAddress ^ address);
public static System.ServiceModel.Description.ServiceEndpointCollection Resolve (System.Collections.Generic.IEnumerable<System.ServiceModel.Description.ContractDescription> contracts, System.ServiceModel.EndpointAddress address);
static member Resolve : seq<System.ServiceModel.Description.ContractDescription> * System.ServiceModel.EndpointAddress -> System.ServiceModel.Description.ServiceEndpointCollection
Public Shared Function Resolve (contracts As IEnumerable(Of ContractDescription), address As EndpointAddress) As ServiceEndpointCollection

参数

contracts
IEnumerable<ContractDescription>

要为其下载和解析元数据的协定。

address
EndpointAddress

元数据地址。

返回

ServiceEndpointCollection

指定协定的 ServiceEndpoint 对象的集合。

例外

地址或协定集合为 null

contracts 为空,contracts 的至少一个成员为 Null,或者 contracts 包含多个具有相同名称和命名空间的协定。

注解

System.ServiceModel.Description.MetadataExchangeClient 上的默认设置用于检索元数据,并且默认 System.ServiceModel.Description.MetadataExchangeClientModeMetadataExchangeClientMode.MetadataExchange

若要下载元数据,而不是将信息解析为 ServiceEndpoint 对象,请直接使用 System.ServiceModel.Description.MetadataExchangeClient

备注

如果没有导入终结点或者没有与协定匹配的终结点,则返回一个空集合。 如果返回了空集合,则写入一个警告跟踪。

适用于

Resolve(Type, EndpointAddress)

下载元数据地址并将其解析为指定地址处的指定协定的 ServiceEndpoint 对象的集合。

public:
 static System::ServiceModel::Description::ServiceEndpointCollection ^ Resolve(Type ^ contract, System::ServiceModel::EndpointAddress ^ address);
public static System.ServiceModel.Description.ServiceEndpointCollection Resolve (Type contract, System.ServiceModel.EndpointAddress address);
static member Resolve : Type * System.ServiceModel.EndpointAddress -> System.ServiceModel.Description.ServiceEndpointCollection
Public Shared Function Resolve (contract As Type, address As EndpointAddress) As ServiceEndpointCollection

参数

contract
Type

要为其下载和解析元数据的协定。

address
EndpointAddress

元数据地址。

返回

ServiceEndpointCollection

指定协定的 ServiceEndpoint 对象的集合。

例外

地址或协定为 null

示例

下面的代码示例演示如何使用 MetadataResolver 类返回作为 ServiceEndpoint 对象的集合的元数据,稍后这些对象将用于连接服务实例。

// Get the endpoints for such a service
ServiceEndpointCollection endpoints = MetadataResolver.Resolve(typeof(SampleServiceClient), metaAddress);
Console.WriteLine("Trying all available WS-Transfer metadata endpoints...");

foreach (ServiceEndpoint point in endpoints)
{
    if (point != null)
    {
        // Create a new wcfClient using retrieved endpoints.
        wcfClient = new SampleServiceClient(point.Binding, point.Address);
        Console.WriteLine(
          wcfClient.SampleMethod("Client used the "
          + point.Address.ToString()
          + " address.")
        );
        wcfClient.Close();
    }
}

注解

使用 Resolve 方法可指定下载和解析元数据时要使用的协定和元数据地址。

System.ServiceModel.Description.MetadataExchangeClient 上的默认设置用于检索元数据,并且默认 System.ServiceModel.Description.MetadataExchangeClientModeMetadataExchangeClientMode.MetadataExchange

若要下载元数据,而不是将信息解析为 ServiceEndpoint 对象,请直接使用 System.ServiceModel.Description.MetadataExchangeClient

备注

如果没有导入终结点或者没有与协定匹配的终结点,则返回一个空集合。 如果返回了空集合,则写入一个警告跟踪。

此方法要求您指定协定类型。 可以通过在客户端代码中声明服务接口或使用由Svcutil.exe生成的 WCF 客户端来指定协定。 如果接口更改 (添加新操作,例如) 必须在客户端代码中更新接口或生成新的 WCF 客户端。 否则,将引发异常。 例如,您有一个可实现称为 ICalculator 的服务协定的服务,该协定可定义 Add()、Sub()、Mult() 和 Div()。 创建客户端应用程序并生成 WCF 客户端。 然后您向 ICalculator 添加了一个方法,称为 Echo()。 然后,如果编写一个不生成新 WCF 客户端的调用 Resolve(Type, EndpointAddress) 的应用程序,则会收到以下异常。

Unhandled Exception: System.ServiceModel.Description.WsdlImporter+WsdlImportException: Cannot locate operation Echo in Contract ICalculator.

适用于

Resolve(IEnumerable<ContractDescription>, EndpointAddress, MetadataExchangeClient)

使用指定元数据地址和 ServiceEndpoint,将元数据地址解析为指定协定的 MetadataExchangeClient 对象。

public:
 static System::ServiceModel::Description::ServiceEndpointCollection ^ Resolve(System::Collections::Generic::IEnumerable<System::ServiceModel::Description::ContractDescription ^> ^ contracts, System::ServiceModel::EndpointAddress ^ address, System::ServiceModel::Description::MetadataExchangeClient ^ client);
public static System.ServiceModel.Description.ServiceEndpointCollection Resolve (System.Collections.Generic.IEnumerable<System.ServiceModel.Description.ContractDescription> contracts, System.ServiceModel.EndpointAddress address, System.ServiceModel.Description.MetadataExchangeClient client);
static member Resolve : seq<System.ServiceModel.Description.ContractDescription> * System.ServiceModel.EndpointAddress * System.ServiceModel.Description.MetadataExchangeClient -> System.ServiceModel.Description.ServiceEndpointCollection
Public Shared Function Resolve (contracts As IEnumerable(Of ContractDescription), address As EndpointAddress, client As MetadataExchangeClient) As ServiceEndpointCollection

参数

contracts
IEnumerable<ContractDescription>

要为其下载和解析元数据的协定。

address
EndpointAddress

元数据地址。

client
MetadataExchangeClient

用于解析元数据的 MetadataExchangeClient

返回

ServiceEndpointCollection

指定协定的 ServiceEndpoint 对象的集合。

例外

地址、协定集合或客户端为 null

contracts 为空,contracts 的至少一个成员为 Null,或者 contracts 包含多个具有相同名称和命名空间的协定。

注解

默认 System.ServiceModel.Description.MetadataExchangeClientModeMetadataExchangeClientMode.MetadataExchange

若要下载元数据,而不是将信息解析为 ServiceEndpoint 对象,请直接使用 System.ServiceModel.Description.MetadataExchangeClient

备注

如果没有导入终结点或者没有与协定匹配的终结点,则返回一个空集合。 如果返回了空集合,则写入一个警告跟踪。

适用于

Resolve(IEnumerable<ContractDescription>, Uri, MetadataExchangeClientMode)

使用指定地址和传输模式,将元数据地址解析为指定协定的 ServiceEndpoint 对象。

public:
 static System::ServiceModel::Description::ServiceEndpointCollection ^ Resolve(System::Collections::Generic::IEnumerable<System::ServiceModel::Description::ContractDescription ^> ^ contracts, Uri ^ address, System::ServiceModel::Description::MetadataExchangeClientMode mode);
public static System.ServiceModel.Description.ServiceEndpointCollection Resolve (System.Collections.Generic.IEnumerable<System.ServiceModel.Description.ContractDescription> contracts, Uri address, System.ServiceModel.Description.MetadataExchangeClientMode mode);
static member Resolve : seq<System.ServiceModel.Description.ContractDescription> * Uri * System.ServiceModel.Description.MetadataExchangeClientMode -> System.ServiceModel.Description.ServiceEndpointCollection
Public Shared Function Resolve (contracts As IEnumerable(Of ContractDescription), address As Uri, mode As MetadataExchangeClientMode) As ServiceEndpointCollection

参数

contracts
IEnumerable<ContractDescription>

要为其下载和解析元数据的协定。

address
Uri

元数据地址。

mode
MetadataExchangeClientMode

检索的模式。

返回

ServiceEndpointCollection

指定协定的 ServiceEndpoint 对象的集合。

例外

地址或协定集合为 null

contracts 为空,contracts 的至少一个成员为 Null,或者 contracts 包含多个具有相同名称和命名空间的协定。

注解

System.ServiceModel.Description.MetadataExchangeClient 上的默认设置用于检索元数据。

若要下载元数据,而不是将信息解析为 ServiceEndpoint 对象,请直接使用 System.ServiceModel.Description.MetadataExchangeClient

备注

如果没有导入终结点或者没有与协定匹配的终结点,则返回一个空集合。 如果返回了空集合,则写入一个警告跟踪。

适用于

Resolve(Type, Uri, MetadataExchangeClientMode)

使用指定地址和传输模式,将元数据地址解析为指定协定的 ServiceEndpoint 对象。

public:
 static System::ServiceModel::Description::ServiceEndpointCollection ^ Resolve(Type ^ contract, Uri ^ address, System::ServiceModel::Description::MetadataExchangeClientMode mode);
public static System.ServiceModel.Description.ServiceEndpointCollection Resolve (Type contract, Uri address, System.ServiceModel.Description.MetadataExchangeClientMode mode);
static member Resolve : Type * Uri * System.ServiceModel.Description.MetadataExchangeClientMode -> System.ServiceModel.Description.ServiceEndpointCollection
Public Shared Function Resolve (contract As Type, address As Uri, mode As MetadataExchangeClientMode) As ServiceEndpointCollection

参数

contract
Type

要为其下载和解析元数据的协定。

address
Uri

元数据地址。

mode
MetadataExchangeClientMode

检索的模式。

返回

ServiceEndpointCollection

指定协定的 ServiceEndpoint 对象的集合。

例外

地址或协定为 null

示例

下面的代码示例演示如何使用 MetadataResolver 下载和返回作为 ServiceEndpoint 对象的集合的元数据,这些对象使用 HTTP GET 请求而不是 WS-Transfer。

// Get the endpoints for such a service using Http/Get request
endpoints = MetadataResolver.Resolve(typeof(SampleServiceClient), httpGetMetaAddress.Uri, MetadataExchangeClientMode.HttpGet);
Client.WriteParameters(endpoints);
ISampleService serviceChannel;
Console.WriteLine(
  "\r\nTrying all endpoints from HTTP/Get and with direct service channels...");

foreach (ServiceEndpoint point in endpoints)
{
    if (point != null)
    {
        ChannelFactory<ISampleService> factory = new ChannelFactory<ISampleService>(point.Binding);
        factory.Endpoint.Address = point.Address;
        serviceChannel = factory.CreateChannel();
        Console.WriteLine("Client used the " + point.Address.ToString() + " address.");
        Console.WriteLine(
          serviceChannel.SampleMethod(
            "Client used the " + point.Address.ToString() + " address."
          )
        );
        factory.Close();
    }
}

注解

使用 Resolve 方法可指定协定、地址和要使用的下载机制。

System.ServiceModel.Description.MetadataExchangeClient 上的默认设置用于检索元数据。

若要下载元数据,而不是将信息解析为 ServiceEndpoint 对象,请直接使用 System.ServiceModel.Description.MetadataExchangeClient

备注

如果没有导入终结点或者没有与协定匹配的终结点,则返回一个空集合。 如果返回了空集合,则写入一个警告跟踪。

适用于

Resolve(IEnumerable<ContractDescription>, Uri, MetadataExchangeClientMode, MetadataExchangeClient)

使用指定地址、传输模式和传输客户端,将元数据地址解析为指定协定的 ServiceEndpoint 对象。

public:
 static System::ServiceModel::Description::ServiceEndpointCollection ^ Resolve(System::Collections::Generic::IEnumerable<System::ServiceModel::Description::ContractDescription ^> ^ contracts, Uri ^ address, System::ServiceModel::Description::MetadataExchangeClientMode mode, System::ServiceModel::Description::MetadataExchangeClient ^ client);
public static System.ServiceModel.Description.ServiceEndpointCollection Resolve (System.Collections.Generic.IEnumerable<System.ServiceModel.Description.ContractDescription> contracts, Uri address, System.ServiceModel.Description.MetadataExchangeClientMode mode, System.ServiceModel.Description.MetadataExchangeClient client);
static member Resolve : seq<System.ServiceModel.Description.ContractDescription> * Uri * System.ServiceModel.Description.MetadataExchangeClientMode * System.ServiceModel.Description.MetadataExchangeClient -> System.ServiceModel.Description.ServiceEndpointCollection
Public Shared Function Resolve (contracts As IEnumerable(Of ContractDescription), address As Uri, mode As MetadataExchangeClientMode, client As MetadataExchangeClient) As ServiceEndpointCollection

参数

contracts
IEnumerable<ContractDescription>

要为其下载和解析元数据的协定。

address
Uri

元数据地址。

mode
MetadataExchangeClientMode

检索的模式。

client
MetadataExchangeClient

用于解析元数据的 MetadataExchangeClient

返回

ServiceEndpointCollection

指定协定的 ServiceEndpoint 对象的集合。

例外

地址、协定集合或客户端为 null

contracts 为空,contracts 的至少一个成员为 Null,或者 contracts 包含多个具有相同名称和命名空间的协定。

注解

若要下载元数据,而不是将信息解析为 ServiceEndpoint 对象,请直接使用 System.ServiceModel.Description.MetadataExchangeClient

备注

如果没有导入终结点或者没有与协定匹配的终结点,则返回一个空集合。 如果返回了空集合,则写入一个警告跟踪。

适用于