Введение в Windows Communication Foundation
-
Upload
akrakovetsky -
Category
Technology
-
view
5.790 -
download
2
description
Transcript of Введение в Windows Communication Foundation
WINDOWS COMMUNICATION FOUNDATION
Калита Роман, [email protected]
SOA, ЗАЧЕМ?
Распределенные-приложения (четкие границы)
Повторное использование кода Кроссплатформенность
(совместимость сервисов определяется политикой)
Масштабируемость (сервисы самостоятельны)
Защита кода (схема и контракт)
WCF, ЗАЧЕМ?
WCF - это единая программная модель, предназначенная для создания сервис-ориентированных приложений
Построение распределенных приложений, где есть сервис, который отвечает за бизнес-логику, есть клиенты. При том, если нужны различные транспорты, сценарии безопасности, балансировка нагрузки и т.д.
ПРОБЛЕМЫ КОТОРЫЕ РЕШАЕТ WCF
Объединяет различные программные модели для различных задач
Потребность в надежного и защищенного обмена
Взаимодействие с клиентами на различных платформах
Продуктивная сервис-ориентированая модель программирования
WCF, ОБЪЕДИНЕННАЯ МОДЕЛЬ
ASMX
WSE
.NET RemotingCOM+
(Enterprise Services)
MSMQ
WCF, ПРЕИМУЩЕСТВАОбъединяет различные программные модели
ASMX, .NET Remoting, MSMQ, Enterprise Services, … и промышленные стандарты
Производительность (быстрее чем ASMX и сравнимо с .NET Remoting)
Хостинг на IIS, сервисах Windows и в standalone приложения как WPF, WinForms,
console apps etc.
Поддержка большинства протоколов: HTTP/HTTPS, TCP, MSMQ, Named pipe etc.
Надежный и защищенный обмен
WCF, ТИПИЧНЫЙ СЦЕНАРИЙ
“Data Storage and Management”
UIPresentation
Business
Data StorageData Access
WCF Service
ClientApplication
ServiceApplication
MVC/MVP:Model
MVC/MVP:View, Presenter
ОСНОВНЫЕ КОНЦЕПЦИИ WCF
Адрес (address)
• С помощью точки соединения адрес однозначно связывается с привязкой и контрактом
Привязка (binding)
• Сеанс, безопасность, поточность, транзакции, транспорт, кодировка сообщений
Контракт
• Интерфейс службы, определяет требования службы к безопасности, сеансу, задает параметры операции
ENDPOINT – ТОЧКА ПРИВЯЗКИ
ADDRESS, BINDING, CONTRACT
Client
Message
Address Binding Contract
(куда) (как) (что)
Endpoint
ABC A B C
Endpoints
A B C
Service
WCF. АРХИТЕКТУРА
Transport
Encoder
Protocol(s)
Transport
Encoder
Protocol(s)
ClientService Contract
andBehaviors
Binding
Address
Dispatcher
WCF. ТИПЫ КОНТРАКТОВ
Service Contract
Определяет операции и поведение
сервиса
ServiceContract,
OperationContract
attributes
Data Contract
Определяют какие типы
данных принимают и передаются
службой
DataContract
attribute
Message Contract
Определение application-
specific заголовков и контента для
сообщений
Управление над
структурой SOAP или
другого типа сообщений
Fault Contract
Определяет специфические
ошибки для службы, их обработку и
передачу клиенту
FaultContract
attribute
ВЗАИМОДЕЙСТВИЕ – OPERATION CONTRACT
Одностороннее (One way): «Вызвал и забыл»
Запрос-Ответ (Request-Reply) Клиент отправляет запрос и блокируется до
получения ответа Дуплексное (Duplex)
Ответ получаем позже и реагируем на него через callback
Client Service
One Way
Request-Reply
Duplex (Dual)
WCF. УПРАВЛЕНИЕ ЭКЗЕМПЛЯРАМИ
Уровня вызова
Для каждого запроса клиента создается новый
экземпляр сервиса (службы)
ServiceBehavior attribute,
option - PerCall
Сеансовые службы
Создается один экземпляр службы
для каждого подключения
клиента
ServiceBehavior attribute,
option - PerSession
Синглетные службы
Все подключения
обслуживаются одним
экземпляром
ServiceBehavior attribute,
option - Single
ПРОСТОЙ WCF SERVICE[ServiceContract]public interface IMyInterface{
[OperationContract]void MyMethod();
}
public class MyService: IMyInterface{
public void MyMethod() {/* do something */}}
<service name="MyService"> <endpoint address=“net.tcp://localhost:1234/MySvc" binding="netTcpBinding" contract="IMyInterface“ />
Service Contract Definition
Service Implementation
Endpoint Definition
Address + Binding
+ Contract
WCF. SERVICE CONTRACT
using System.ServiceModel;
[ServiceContract]public interface ICalculate {
[OperationContract(IsOneWay=true)] void StoreProblen( ComplexProblem problem); [OperationContract] ComplexProblem GetProblem);
}
WCF. DUPLEX РЕЖИМ
[ServiceContract(Session=true, CallbackContract=typeof(ICalculatorResults)]public interface ICalculatorProblems{ [OperationContract(IsOneWay=true)] void SolveProblem (ComplexProblem p);}
public interface ICalculatorResults{ [OperationContract(IsOneWay=true)] void Results(ComplexProblem p);}
WCF. DATA CONTRACT
[DataContract]public class ComplexNumber{ [DataMember] public double Real = 0.0D; [DataMember] public double Imaginary = 0.0D; public ComplexNumber(double r, double i) { this.Real = r; this.Imaginary = i; }}
WCF. MESSAGE CONTRACT
[MessageContract]public class ComplexProblem{ [MessageHeader] public string operation; [MessageBody] public ComplexNumber n1; [MessageBody] public ComplexNumber n2; [MessageBody] public ComplexNumber solution; // Constructors…}
WCF. DEFINING ENDPOINTS
<?xml version="1.0" encoding="utf-8" ?><configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> <system.serviceModel> <services> <service serviceType="CalculatorService"> <endpoint address="Calculator" bindingSectionName="basicProfileBinding" contractType="ICalculator" /> </service> </services> </system.serviceModel></configuration>
WCF. CONFIGURING BINDINGS
<bindings> <basicProfileBinding> <binding configurationName="Binding1" hostnameComparisonMode="StrongWildcard" transferTimeout="00:10:00" maxMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" </binding> </basicProfileBinding></bindings>
<endpoint address="Calculator" bindingSectionName="basicProfileBinding" bindingConfiguration="Binding1" contractType="ICalculator" />
WCF. CUSTOM BINDINGS
<bindings> <customBinding> <binding configurationName="Binding1"> <reliableSession bufferedMessagesQuota="32" inactivityTimeout="00:10:00" maxRetryCount="8" ordered="true" /> <httpsTransport manualAddressing="false" maxMessageSize="65536" hostnameComparisonMode="StrongWildcard"/> <textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16" messageVersion="Default" encoding="utf-8" /> </binding> </customBinding></bindings>
WCF. КЛИЕНТ
Клиент использует прокси класс для соединения с сервисом
Прокси класс: CLR интерфейс и класс
представляющий все методы и объекты сервиса
Содержит дополнительные методы для управления прокси классом и соединением
WCF. КЛИЕНТ
Клиент использует прокси класс для соединения с сервисом
Прокси класс: CLR интерфес и класс
представляющий все методы и объекты сервиса
Содержит дополнительные методы для управления прокси классом и соединением
WCF. ГЕНЕРАЦИЯ ПРОКСИ КЛАССА В VS
В Visual Studio 2005/2008
WCF. DEMOS
DEMO
РЕСУРСЫ http://msdn2.microsoft.com/en-us/netframework/
aa663324.aspx - MSDN Windows Communication Foundation portal
http://msdn.microsoft.com/en-us/library/ms751514.aspx - WCF samples
http://www.codeproject.com/KB/WCF/WCFOverview.aspx - WCF overview
Дж. Лёве, Создание служб WCF, СПб.: Питер, O’Reilly, 2008
ВОПРОСЫ И ОТВЕТЫ
?