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 в конфигурационном файле.
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.




