共用方式為


基本範例

基本探索範例示範如何建立可探索的服務,以及如何搜尋和呼叫可探索的服務。 這個範例包含二個專案:服務和用戶端。

注意

這個範例會在程式碼中實作探索。 如需在組態中實作探索的範例,請參閱組態

服務

這是簡單的計算機服務實作。 與探索相關的程式碼位於 Main 中,其中 ServiceDiscoveryBehavior 會加入至服務主機,並且加入 UdpDiscoveryEndpoint,如下列程式碼所示。

using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress))
{
    serviceHost.AddServiceEndpoint(typeof(ICalculatorService), new
      WSHttpBinding(), String.Empty);

    // Make the service discoverable over UDP multicast
    serviceHost.Description.Behaviors.Add(new ServiceDiscoveryBehavior());
    serviceHost.AddServiceEndpoint(new UdpDiscoveryEndpoint());

    serviceHost.Open();
    // ...
}

用戶端

用戶端會使用 DynamicEndpoint 尋找服務。 DynamicEndpoint 是標準端點,會在用戶端開啟時解析服務的端點。 在此案例中,DynamicEndpoint 會根據服務合約尋找服務。 根據預設,DynamicEndpoint 會透過 UdpDiscoveryEndpoint 進行搜尋。 一旦找到服務端點,用戶端就會透過指定的繫結連線到該服務。

public static void Main()
{
   DynamicEndpoint dynamicEndpoint = new DynamicEndpoint( ContractDescription.GetContract(typeof(ICalculatorService)), new WSHttpBinding());
   // ...
}

用戶端會定義稱為 InvokeCalculatorService 的方法,該方法會使用 DiscoveryClient 類別搜尋服務。 DynamicEndpoint 繼承自 ServiceEndpoint,因此可以傳遞至 InvokeCalculatorService 方法。 接著在範例中會使用 DynamicEndpoint 建立 CalculatorServiceClient 的執行個體,然後呼叫計算機服務的各項作業。

static void InvokeCalculatorService(ServiceEndpoint serviceEndpoint)
{
   // Create a client
   CalculatorServiceClient client = new CalculatorServiceClient(serviceEndpoint);

   Console.WriteLine("Invoking CalculatorService");
   Console.WriteLine();

   double value1 = 100.00D;
   double value2 = 15.99D;

   // Call the Add service operation.
   double result = client.Add(value1, value2);
   Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);

   // Call the Subtract service operation.
   result = client.Subtract(value1, value2);
   Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);

   // Call the Multiply service operation.
   result = client.Multiply(value1, value2);
   Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);

   // Call the Divide service operation.
   result = client.Divide(value1, value2);
   Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);
   Console.WriteLine();

   //Closing the client gracefully closes the connection and cleans up resources
   client.Close();
}

若要使用這個範例

  1. 這個範例使用 HTTP 端點,若要執行這個範例,則必須加入正確的 URL ACL。 如需詳細資訊,請參閱設定 HTTP 和 HTTPS。 以更高的權限執行下列命令應該就能加入適當的 ACL。 如果命令未正確執行,您可能要將 Domain 和 Username 替換成下列引數。 netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. 使用 Visual Studio,開啟 Basic.sln 並建置範例。

  3. 執行 service.exe 應用程式。

  4. 在啟動服務之後,執行 client.exe。

  5. 請注意,用戶端不需知道位址,就能找到此服務。