WCF: конфигурационный файл

WCF: конфигурационный файл

Всем доброго времени суток. На связи Алексей Гулынин. Продолжаем работать с WCF. В прошлой статье мы познакомились с понятием "Конечная точка" в WCF. Существует несколько способов задания конечных точек: либо жестко зашить в коде (как мы делали в предыдущей статье), либо записать в конфигурационный файл. С конф. файлом вариант предпочтительней, т.к. после внесения изменения в файл нет необходимости компилировать программу заново.

Изменим код сервисной части, добавив туда конфигурационный файл. Сам файл будет иметь вид:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name ="HelloWCF.Service">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:323/IContract"/>
          </baseAddresses>
        </host>
        <!-- указываем адрес, привязку и контракт -->
        <endpoint address=""
                  binding="basicHttpBinding"
                  contract="HelloWCF.IContract" />
      </service>
    </services>
  </system.serviceModel>
</configuration>

Код серверной части изменится следующим образом. Файл Service.cs:

using System;
using System.ServiceModel;

namespace HelloWCF
{
  // Здесь укажем контракт
  // У нас теперь он не вынесен в отдельный файл
  [ServiceContract]
  interface IContract
  {
    [OperationContract]
    void Print(string str);
  }

  // Сам сервис
  class Service : IContract
  {
    public void Print(string str)
    {
      Console.WriteLine("Сервер получил сообщение:  {0}", str);
    }
  }
}

Файл Server.cs:

using System;
using System.ServiceModel;

namespace HelloWCF
{
  class Server
  {
    static void Main(string[] args)
  {
      // Создаём хост с указанием сервиса
      ServiceHost serviceHost = new ServiceHost(typeof(Service));
      // Запускаем наш хост
      serviceHost.Open();
      Console.WriteLine("Сервер запущен.");

      Console.ReadKey();
      // Закрываем наш хост после того, как будет нажата любая клавиша
      serviceHost.Close();
    }
  }
}

Как мы видим в коде: теперь не указываем ни адрес, ни привязку, ни контракт. Все эти настройки берутся из конфигурационного файла.

Клиентский код не изменился:

Посмотреть код:

using System;
using System.ServiceModel;

namespace Client
{
  // Указываем контракт
  [ServiceContract]
  interface IContract
  {
    [OperationContract]
    void Print(string str);
  }
  class Client
  {
    static void Main(string[] args)
    {
      Uri address = new Uri("http://localhost:323/IContract"); // Адрес
      BasicHttpBinding binding = new BasicHttpBinding(); // Привязка
      // Создаём конечную точку.
      EndpointAddress endpoint = new EndpointAddress(address);
      // Создаём фабрику каналов.
      ChannelFactory<IContract> channelFactory = new ChannelFactory<IContract>(binding, endpoint);
      // Создаём канал
      IContract channel = channelFactory.CreateChannel();
      // Отправляем сообщение
      channel.Print("Send message using WCF!!!");

      // После нажатия клавиши клиент завершит свою работу
      Console.ReadKey();
    }
  }
}

В данной статье вы узнали о том, как задавать адрес, привязку и контракт WCF в конфигурационном файле.

На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.


Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *