Базовый образец

В этом образце показано, как сделать службу обнаруживаемой, а также как искать и вызывать обнаруживаемую службу. Этот образец состоит из двух проектов: службы и клиента.

Dd483369.note(ru-ru,VS.100).gifПримечание
Этот образец реализует возможность обнаружения в коде. Образец того, как реализовать обнаружение в конфигурации, см. в разделе Образец конфигурации.

Служба

Это простая реализация службы калькулятора. Код обнаружения можно найти в 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-адресу. Дополнительные сведения см. в разделе Настройка HTTP и HTTPS. Нужные списки управления доступом будут добавлены после выполнения следующей команды с повышенными привилегиями. Если команда не работает, следует указать домен и имя пользователя в следующих аргументах. netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. С помощью Visual Studio 2010 откройте Basic.sln и соберите образец.

  3. Запустите приложение service.exe.

  4. После запуска службы запустите client.exe.

  5. Заметьте, что клиенту удалось найти службу, не зная ее адреса.

Dd483369.Important(ru-ru,VS.100).gif Примечание
Образцы уже могут быть установлены на компьютере. Перед продолжением проверьте следующий каталог (по умолчанию).

<диск_установки>:\WF_WCF_Samples

Если этот каталог не существует, перейдите на страницу Образцы Windows Communication Foundation (WCF) и Windows Workflow Foundation (WF) для .NET Framework 4, чтобы загрузить все образцы Windows Communication Foundation (WCF) и WF. Этот образец расположен в следующем каталоге.

<диск_установки>:\WF_WCF_Samples\WCF\Basic\Discovery\Basic