В ближайших нескольких постах
предлагаю ознакомиться с новыми возможностями в WCF 4.0, особенно
учитывая, что официальный выход .Net 4.0 запланирован на 12 апреля,
т.е. осталось набраться терпения еще всего лишь на 35 дней!
Начнем мы знакомство с такого
улучшения как упрощенная конфигурация.
Endpoint по
умолчанию - позволяет не прописывать явно в секции
<configuration> никаких конечных точек (endpoint).
ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService),
new Uri("http://localhost/CalculatorService"),
new Uri("net.tcp://localhost/CalculatorService"));
serviceHost.Open();
Console.WriteLine("WCF Service is running.");
Console.WriteLine("Press <ENTER> to terminate service.");
Console.ReadLine();
serviceHost.Close();
<configuration>
</configuration>
WCF 4.0 автоматически сформирует
конечную точку (endpoint) и присвоит ей соответствующие параметры,
в частности, сопоставит схему http c BasicHttpBinding, а net.tcp -
c NetTcpBinding. При это файл web.config не содержит никаких
настроек, тэг <service> (и его подчиненные тэги -
<endpoint>) в нем отсутствует.
Binding/behaivor по
умолчанию (nameless behaivor) - позволяют сервису
наследовать определенные по умолчанию привязки (binding) и
поведения (behaivor), эти привязки и поведения определены на более
высоком уровне иерархии (machine.config > rootweb.config >
web.config и т.д.), что позволяет так же создавать гибкую
иерархическую модель наследования настроек.
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="" maxReceivedMessageSize="9999999">
<readerQuotas maxArrayLength="9999999"/>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Для того чтобы применить поведение
(behaivor) по умолчанию необходимо либо оставить его атрибут name
незаполненным, либо пропустить его в определении.
ProtocolMapping -
определяет сопоставление привязки (binding) и схемы/протокола
(например, HTTP или NET.TCP ), которое применяется по умолчанию.
Если обратиться к первому примеру (Endpoint по умолчанию), то
имеено за счет ProtocolMapping для cхемы http использовался
BasicHttpBindi...