語言

MetadataResolver.Resolve 方法

定義

將一個元資料位址下載並解析到該服務的物件中 ServiceEndpoint 。

多載

名稱 Description
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 為空,或 contracts 包含多個名稱與命名空間相同的合約。

備註

預設 System.ServiceModel.Description.MetadataExchangeClient 設定用於擷取元資料,預設 System.ServiceModel.Description.MetadataExchangeClientMode 為 MetadataExchangeClientMode.MetadataExchange。

若要下載元資料但不將資訊解析成ServiceEndpoint物件,請直接使用System.ServiceModel.Description.MetadataExchangeClient

Note

若未匯入端點或無端點與合約匹配,則回傳空集合。 若回傳空集合,則會寫入警告追蹤。

適用於

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

Note

若未匯入端點或無端點與合約匹配,則回傳空集合。 若回傳空集合,則會寫入警告追蹤。

此方法需要你指定合約類型。 你可以透過在用戶端程式碼中宣告服務介面,或使用由 Svcutil.exe產生的 WCF 用戶端來指定合約。 如果介面改變(例如新增新操作),你必須在用戶端程式碼中更新介面或產生新的 WCF 用戶端。 如果沒有,則會拋出例外。 舉例來說,你有一個服務實作了一個叫 ICalculator 的服務合約,定義了 Add()、Sub()、Mult()和 Div()。 你建立一個客戶端應用程式並產生 WCF 客戶端。 接著你要在 ICalculator 裡加入一個叫 Echo() 的方法。 如果你接著寫一個應用程式,但 Resolve(Type, EndpointAddress) 沒有產生新的 WCF 用戶端,就會遇到以下例外。

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 為空,或 contracts 包含多個名稱與命名空間相同的合約。

備註

預設的 System.ServiceModel.Description.MetadataExchangeClientMode 是 MetadataExchangeClientMode.MetadataExchange。

若要下載元資料但不將資訊解析成ServiceEndpoint物件,請直接使用System.ServiceModel.Description.MetadataExchangeClient

Note

若未匯入端點或無端點與合約匹配,則回傳空集合。 若回傳空集合,則會寫入警告追蹤。

適用於

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

取回方式。

傳回

一組 ServiceEndpoint 指定合約的物件。

例外狀況

地址或合約集合為 null。

contracts 為空,至少有一個成員 contracts 為空,或 contracts 包含多個名稱與命名空間相同的合約。

備註

預設設定 System.ServiceModel.Description.MetadataExchangeClient 用來取得中繼資料。

若要下載元資料但不將資訊解析成ServiceEndpoint物件,請直接使用System.ServiceModel.Description.MetadataExchangeClient

Note

若未匯入端點或無端點與合約匹配,則回傳空集合。 若回傳空集合,則會寫入警告追蹤。

適用於

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

取回方式。

傳回

一組 ServiceEndpoint 指定合約的物件。

例外狀況

地址或合約為 null。

範例

以下程式碼範例展示了如何使用 HTTP MetadataResolver GET 請求而非 WS-Transfer 來下載並回傳 metadata 作為物件集合 ServiceEndpoint 。

// 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

Note

若未匯入端點或無端點與合約匹配,則回傳空集合。 若回傳空集合,則會寫入警告追蹤。

適用於

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 用來擷取元資料。

傳回

一組 ServiceEndpoint 指定合約的物件。

例外狀況

地址、合約收集或客戶為 null。

contracts 為空,至少有一個成員 contracts 為空,或 contracts 包含多個名稱與命名空間相同的合約。

備註

若要下載元資料但不將資訊解析成ServiceEndpoint物件,請直接使用System.ServiceModel.Description.MetadataExchangeClient

Note

若未匯入端點或無端點與合約匹配,則回傳空集合。 若回傳空集合,則會寫入警告追蹤。

適用於