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