MetadataResolver.Resolve 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
將一個元資料位址下載並解析到該服務的物件中 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
元資料位址。
取回方式。
傳回
一組 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
元資料位址。
取回方式。
傳回
一組 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
元資料位址。
取回方式。
- client
- MetadataExchangeClient
它們 MetadataExchangeClient 用來擷取元資料。
傳回
一組 ServiceEndpoint 指定合約的物件。
例外狀況
地址、合約收集或客戶為 null。
contracts 為空,至少有一個成員 contracts 為空,或 contracts 包含多個名稱與命名空間相同的合約。
備註
若要下載元資料但不將資訊解析成ServiceEndpoint物件,請直接使用System.ServiceModel.Description.MetadataExchangeClient
Note
若未匯入端點或無端點與合約匹配,則回傳空集合。 若回傳空集合,則會寫入警告追蹤。