共用方式為


探索尋找與尋找準則

探索尋找作業是由用戶端初始化,用於探索一項或多項服務,並且為探索中的其中一個主要動作。 執行尋找會透過網路傳送 WS-Discovery Probe 訊息。 符合指定準則的服務會以 WS-Discovery ProbeMatch 訊息回覆。 如需探索訊息的詳細資訊,請參閱 WS-Discovery 規格

DiscoveryClient

DiscoveryClient 類別會提供執行尋找作業的機制,並且讓執行探索用戶端的作業更為簡單。 它包含 Find 方法,用於執行 (封鎖) 同步尋找,以及 FindAsync 方法,用於初始化非封鎖非同步尋找。 這兩種方法都採用 FindCriteria 參數,並且透過 FindResponse 物件將結果提供給使用者。

FindCriteria

FindCriteria 擁有數個屬性,可分組為搜尋準則,用於指定您要尋找的服務,以及尋找終止準則 (搜尋應持續的時間長度)。 FindCriteria 可以包含多個搜尋準則。 根據預設,服務必須符合所有元件,否則不會將本身視為相符的服務。 如果您要尋找僅符合部分準則的服務,可以在服務上實作自訂尋找邏輯,或是使用多個查詢。

搜尋準則包括:

  • ContractTypeNameElement - 選擇性。 要搜尋的服務合約名稱,以及搜尋服務時常用的準則。 如果指定多個合約名稱,則只會回覆符合「所有」合約的服務端點。 請注意,在 WCF 中,一個端點僅支援一個合約。

  • ScopeElement - 選擇性。 範圍是絕對 URI,可用來分類個別服務端點。 在多個端點公開相同合約,而您希望能夠搜尋端點子集的情況下,可能會想要使用這種方式。 如果指定多個範圍,則只會回覆符合「所有」範圍的服務端點。

  • ScopeMatchBy:指定比對 Probe 訊息中的範圍與端點的範圍時,要使用的比對演算法。 支援的範圍比對規則有五種:

    如果未指定範圍比對規則,則會使用 ScopeMatchByPrefix

終止準則包括:

  1. Duration - 在網路上等待服務回覆的時間上限。 預設持續時間為 20 秒。

  2. MaxResults - 要等待的回覆數目上限。 如果在 MaxResults 經過之前,先收到 Duration 回覆,尋找作業就會結束。

FindResponse

FindResponse 擁有 Endpoints 集合屬性,其中包含網路上相符的服務傳送的任何回覆。 如果沒有任何服務回覆,則集合會是空的。 如果有一項或多項服務回覆,則每個回覆都會儲存在 EndpointDiscoveryMetadata 物件中,其中包含與服務相關的位址、合約和一些額外資訊。

下列範例示範如何在程式碼中執行尋找作業。

// Create DiscoveryClient
DiscoveryClient discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());

// Create FindCriteria
FindCriteria findCriteria = new FindCriteria(typeof(IPrinterService));
findCriteria.Scopes.Add(new Uri("http://www.contoso.com/building1/floor1"));
findCriteria.Duration = TimeSpan.FromSeconds(10);

// Find ICalculatorService endpoints
FindResponse findResponse = discoveryClient.Find(findCriteria);

Console.WriteLine("Found {0} ICalculatorService endpoint(s).", findResponse.Endpoints.Count)

另請參閱