MetadataResolver.Resolve 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
下载元数据地址并将其解析为该服务的 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
元数据地址。
返回
指定协定的 ServiceEndpoint 对象的集合。
例外
地址或协定集合为 null
。
contracts
为空,contracts
的至少一个成员为 Null,或者 contracts
包含多个具有相同名称和命名空间的协定。
注解
System.ServiceModel.Description.MetadataExchangeClient 上的默认设置用于检索元数据,并且默认 System.ServiceModel.Description.MetadataExchangeClientMode 为 MetadataExchangeClientMode.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
元数据地址。
返回
指定协定的 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.MetadataExchangeClientMode 为 MetadataExchangeClientMode.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。
返回
指定协定的 ServiceEndpoint 对象的集合。
例外
地址、协定集合或客户端为 null
。
contracts
为空,contracts
的至少一个成员为 Null,或者 contracts
包含多个具有相同名称和命名空间的协定。
注解
默认 System.ServiceModel.Description.MetadataExchangeClientMode 为 MetadataExchangeClientMode.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
元数据地址。
检索的模式。
返回
指定协定的 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
元数据地址。
检索的模式。
返回
指定协定的 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
元数据地址。
检索的模式。
- client
- MetadataExchangeClient
用于解析元数据的 MetadataExchangeClient。
返回
指定协定的 ServiceEndpoint 对象的集合。
例外
地址、协定集合或客户端为 null
。
contracts
为空,contracts
的至少一个成员为 Null,或者 contracts
包含多个具有相同名称和命名空间的协定。
注解
若要下载元数据,而不是将信息解析为 ServiceEndpoint 对象,请直接使用 System.ServiceModel.Description.MetadataExchangeClient。
备注
如果没有导入终结点或者没有与协定匹配的终结点,则返回一个空集合。 如果返回了空集合,则写入一个警告跟踪。