2. SOA, зачем? Распределенные-приложения(четкие границы) Повторное использование кода Кроссплатформенность(совместимость сервисов определяется политикой) Масштабируемость(сервисы самостоятельны) Защита кода (схема и контракт)
3. WCF, зачем? WCF - это единая программная модель, предназначенная для создания сервис-ориентированных приложений Построение распределенных приложений, где есть сервис, который отвечает за бизнес-логику, есть клиенты. При том, если нужны различные транспорты, сценарии безопасности, балансировка нагрузки и т.д.
4. Проблемы которые решает WCF Объединяет различные программные модели для различных задач Потребность в надежного и защищенного обмена Взаимодействие с клиентами на различных платформах Продуктивная сервис-ориентированая модель программирования
7. WCF, Типичный сценарий Presentation Client Application UI MVC/MVP: View, Presenter “Data Storage and Management” WCF Service Service Application MVC/MVP: Model Business Data Access Data Storage
12. взаимодействие – OPERATION CONTRACT One Way Client Service Request-Reply Duplex (Dual) Одностороннее (One way): «Вызвал и забыл» Запрос-Ответ (Request-Reply) Клиент отправляет запрос и блокируется до получения ответа Дуплексное (Duplex) Ответ получаем позже и реагируем на него через callback
14. ПРОСТОЙ WCF SERVICE Service Contract Definition [ServiceContract] public interface IMyInterface { [OperationContract] void MyMethod(); } Service Implementation public class MyService: IMyInterface { public void MyMethod() {/* do something */} } <service name="MyService"> <endpoint address=“net.tcp://localhost:1234/MySvc" binding="netTcpBinding" contract="IMyInterface“ /> Endpoint Definition Address + Binding + Contract
15. WCF. SERVICE ConTRACT using System.ServiceModel; [ServiceContract] public interface ICalculate { [OperationContract(IsOneWay=true)] void StoreProblen( ComplexProblem problem); [OperationContract] ComplexProblemGetProblem); }
16. 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); }
17. 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; } }
18. WCF. MESSAGE CONTRACT [MessageContract] public class ComplexProblem { [MessageHeader] public string operation; [MessageBody]public ComplexNumber n1; [MessageBody]public ComplexNumber n2; [MessageBody]public ComplexNumber solution; // Constructors… }
Существует три режима создания экземпляра нашего сервисного объекта:PerCall - экземпляр службы создается для каждого вызова от каждого клиента. Этот режим хорош, наверное, для явно одиночных вызовов: Rss, перевод текста, и так далее. PerSession - экземпляр службы создается на период действия сеанса. Этот вариант подходит для большинства встречавшихся мне сценариев достаточно продолжительного взаимодействия, так как позволяет хранить на сервисе служебную информацию между вызовами клиента. Singleton - один экземпляр на всех. Если честно, в голову не приходит ни одного реального проекта, в котором можно подобный режим использовать. Один плюс, который я заметил - к экземпляру службы можно обратиться через его ServiceHost.