SlideShare a Scribd company logo
Венжик Игорь
Что такое SOA
Архитектура WCF
WSDL XSD SOAP
Контракты (Contracts)
Привязки (Bindings)
Поведение (Behaviors)
Хостинг (Hosting)

Безопасность
Расширяемость WCF
SOAP vs REST
Маршрутизация. Масштабируемость. Отказоустойчивость
Что такое SOA
Архитектура WCF
Первый WCF сервис
Слабое связывание (Loose coupling)
Предсказуемость (Formal contract)
Абстрагирование от реализации
(Abstraction)
Автономность (Autonomy)
Повторное использование (Reusability)
Принцип композиции (Composability)
Открытость (Discoverability)
Сервис2
(*)

Клиент
a+b
a+b*c
a/b

Сервис
(+)

Сервис3
(/)
Четкие границы
Пересечение границ – четко определено
Пересечение границ стоит ресурсов

Сервисы самостоятельны
Мы должны понимать что используемый нами сервис будет
развиваться и у нас нет контроля над этим
Сервисы управляются и разрабатываются независимо
Сервис, который мы используем может быт недоступен!

Сервисы предоставляют схему и контракт, но не код
Сервисы взаимодействуют по контрактам, которые не
меняются.
Сервисы предоставляют только контракт, реализация может
меняться и недолжна нас беспокоить
WCF Part 1
ASMX

Binary .NET-.NET
Communication

.NET Remoting

Distributed
Transactions

Enterprise Services

WS-* Specifications

Web Services
Enhancements

Queued Messaging

System.Messaging

RESTful
Communication

System.Net

Windows Communication
Foundation

Interoperable Web
Services
Конечная точка

Клиент

C

Сервис

(Endpoint)

B

A

Адрес
(Где)

Сообщение

A

B C

Привязки Контракт
(Как)

(Что)
Клиент

Сервис
A

C

B

A

Адрес
(Где)

Сообщение

B

C

A

B

C

Привязки Контракт
(Как)

(Что)
Клиент

Сервис
A

Bv

C

B

A

Сообщение

B

C

Bv

A

B

C

Bv
Metadata

Клиент

Сервис
A

Bv

C

B

A

Сообщение

B

C

Bv

A

B

C

Bv
Metadata

Клиент

Сервис
A

Bv
Bv

C

B

A

Сообщение

Proxy

B

C

Bv

A

B

C

Bv

ServiceHost<T>()

Hosting Environments
WAS

IIS

.exe

Windows
Service

DllHost
Binding (Как?)

Contract (Что?)

Просторы интернетаAddress

(Где?)
WCF Part 1
WCF Part 1
WSDL XSD SOAP
Контракты (Contracts)
Привязки (Bindings)
Поведение (Behaviors)
Хостинг (Hosting)
WCF Part 1
WSDL – это язык описания веб-сервисов,
основанный на языке XML
WSDL документ состоит из трех логических
частей
Определения типов данных – отправляемые и
получаемые сервисом XML сообщений
(DataContract)
Операции сервиса – список операций, которые
может предоставить сервис (ServiceContract)
Связывание сервисов – способ общения с
сервисом (Binding)
http://w3.org/TR/wsdl
Конверт
Заголовок
Action
To
From
Reply-To, Error

Тело

SOAP: Envelope

SOAP: Header
SOAP: Body
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<MessageID>1A01E8FE1C4F4451BFA9B6B13DF647FA</MessageID>
<Action>http://tscrm.com/GetStockPrice</Action>
</soap:Header>
<soap:Body>
<m:GetStockPrice xmlns:m="...">
<m:StockName>IBM</m:StockName>
</m:GetStockPrice>
</soap:Body>
</soap:Envelope>
<soap:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header/>
<soap:Body>
<GetStockPriceResponse xmlns="http://tempuri.org/">
<GetStockPriceResult>10 000</GetStockPriceResult>
</GetStockPriceResponse>
</soap:Body>
</soap:Envelope>
WCF Part 1
WCF Part 1
Service
Data
Message

• Описывает операции,
выполняемые сервисом
• CLR тип соответствует WSDL

• Структура данных
• CLR тип соответствует XSD

• Структура сообщений
• CLR тип соответствует SOAP
сообщению
[ServiceContract]
public interface ICalculator
{
[OperationContract]
ComplexProblem SolveProblem (ComplexProblem p);
}
SessionMode
NotAllowed
Allowed (default)
Required

Name & Namespace
ProtectionLevel
None
Sign
EncryptAndSign

CallbackContract
[ServiceContract(CallbackContract=
typeof(ICalculatorResults)]
public interface ICalculatorProblems {
[OperationContract(IsOneWay=true)]
void SolveProblem (ComplexProblem p);
}
public interface ICalculatorResults {
[OperationContract(IsOneWay=true)]
void Results(ComplexProblem p);
}
IsOneWay
IsInitiating & IsTerminating
Name
AsyncPattern
Action
ReplyAction
ProtectionLevel & HasProtectionLevel
Дуплексная связь
[DataContract]
public class Player {
[DataMember]
public string Name = “Anonymous”;
[DataMember]
public int Age { get; set; }
}
[CollectionDataContract(Name = “Players",
ItemName = “Player"))]
public class Team : List<Player> {
[DataMember]
public string Name { get; private set; }
}
[MessageContract]
public class ComplexProblem
{
[MessageHeader]
public string operation;
[MessageBody]
public ComplexNumber n1;
[MessageBody]
public ComplexNumber n2;
[MessageBody]
public ComplexNumber solution;
// Constructors…
}
Контракт данных
[ServiceContract]
Методы сервиса отмечаем атрибутом [OperationContract]
На уровне контракта сервиса можно затребовать поддержку
сессий (SessionMode)
Можем указать каким методом начитать взаимодействие с
сервисом (IsInitiating) и указать каким методом разрывать
соединение (IsTerminating)

[DataContract] или [CollectionDataContract]
Помним что контракты данных подчиняться общим правилам
сериализации. В контракте не может быть циклических ссылок
У всех свойств отмеченных атрибутом [DataMember] должны
присутствовать оба аксессора get и set
Если присутствие одного из аксессоров get или set
противоречит бизнес логике, его можно сделать приватным

[MessageContract]
Если метод сервиса принимает контракт сообщения, у него не
может быть дополнительных параметров
WCF Part 1
WCF Part 1
Привязки — объекты, используемые для задания
сведений о связи, необходимых для подключения к
конечной точке сервиса

Транспорт – определяет транспортный протокол
обмена сообщениями (Http, Tcp, …)
Кодирование – определяет используемый тип
кодирования сообщений
Текст (xml, json, …)
Бинарный

Другие протоколы
Безопасность
Гарантированная доставка сообщения
Поддержка транзакций
Транспорт Кодировка

Security

Reliability

Протокол

WS-*

WS-*

WS-*

HTTP
TCP

Binary
Text

HTTP

Text

TCP

Binary

WS-*

WS-*

WS-*

Pipes

MTOM

Custom

Custom

Custom

MSMQ

Custom

Custom
NP = Named Pipes
T = Transport Security
S = WS-Security
O = One-Way Only

BasicHttpBinding

Http

BP

WsHttpBinding

Http

WS TS

WsDualHttpBinding

Http

WS TS

NetTcpBinding

Tcp

TS

O

NetNamedPipesBinding NP

TS

O

NetMsmqBinding

TS

NetPeerTcpBinding

MSMQ
P2P

T

TS
<?xml version="1.0" encoding="utf-8" ?>
<configuration">
<system.serviceModel>
<services>
<service type="CalculatorService">
<endpoint address=“http://localhost/calculator"
binding="basicHttpBinding"
contractType="ICalculator" />
</service>
</services>
</system.serviceModel>
</configuration>
<endpoint address=“http://localhost/calculator"
binding="basicHttpBinding"
bindingConfiguration="Binding1"
contractType="ICalculator" />
<bindings>
<basicHttpBinding>
<binding name="Binding1“ messageEncoding="Text"
textEncoding="utf-8" transferMode="Buffered">
<security mode="Message">
<transport clientCredentialType="None"/>
<message clientCredentialType="UserName“ />
</security>
</binding>
</basicHttpBinding>
</bindings>
<endpoint address=“http://localhost/calculator"
binding="basicHttpBinding"
bindingConfiguration=""
contractType="ICalculator" />
<bindings>
<basicHttpBinding>
<binding name=""
maxReceivedMessageSize="9999999">
<readerQuotas maxArrayLength="9999999"/>
</binding>
</basicHttpBinding>
</bindings>
<protocolMapping>
<add scheme="http" binding="basicHttpBinding"/>
<add scheme="net.tcp" binding="netTcpBinding"/>
<add scheme="net.pipe" binding="netNamedPipeBinding"/>
<add scheme="net.msmq" binding="netMsmqBinding"/>
</protocolMapping>
<protocolMapping>
<add scheme="http" binding="basicHttpBinding"/>
<add scheme="net.tcp" binding="netTcpBinding"/>
</protocolMapping>
<protocolMapping>
<clear scheme="http" />
<add scheme="http" binding="customBinding"
bindingConfiguration="binaryHttp" />
</protocolMapping>
<bindings>
<customBinding>
<binding name="binaryHttp">
<binaryMessageEncoding/>
<httpTransport/>
</binding>
</customBinding>
</bindings>
WCF Part 1
WCF Part 1
Поведение сервиса может быть настроено как в
коде сервиса так и в конфигурационном файле
Атрибутом ServiceBehavior может быть отмечен
только класс, который инкапсулирует в себе весь
функционал сервиса

Основные параметры
AddressFilterMode
AutomaticSessionShutdown
ReleaseServiceInstanceOnTransactionComplete
TransactionIsolationLevel
IncludeExceptionDetailInFaults
Service
PerSession
Single

Single
Multiple

InstanceContextMode

ConcurrencyMode

PerSession

Single

PerCall

Reentrant

Single

Multiple
Поведение операций может задаваться только
в коде
Атрибутом может быть отмечен только метод
конкретного класса реализующего контракт
Основные параметры
Impersonation (олицетворение)
TransactionAutoComplete
TransactionScopeRequired
ReleaseInstanceMode
None
BeforeCall
AfterCall
BeforeAndAfterCall
[ServiceBehavior(
InstanceContextMode =
InstanceContextMode.Single,
ConcurrencyMode = ConcurrencyMode.Multiple)]
public class Service : IService {
[OperationBehavior(
ReleaseInstanceMode =
ReleaseInstanceMode.AfterCall)]
public DateTime GetCurrentDate() {
return DateTime.Now;
}
WCF Part 1
WCF Part 1
Self-hosting
Console Application
WinForm Application
WPF Application

Internet Information Services (IIS)
Separate (Statealone)
ASP Application

Windows Service
Http
Console App
WinForm App
WPF App
Windows Service
Web server IIS6
Web server IIS7

Tcp

Named Pipes MSMQ P2P
WCF Part 1
Вопросы?
Пожелания?

More Related Content

PDF
Введение в сервис-ориентированную архитектуру
PDF
PPTX
Bp monline boostsalesperfomance
PDF
Удобный интернет магазин
PPTX
BPMonline CRM on Mobile: escape from office
PPTX
CRM Evolutiion BPMonline
PDF
Haab Teleport TV 1.5 functional
Введение в сервис-ориентированную архитектуру
Bp monline boostsalesperfomance
Удобный интернет магазин
BPMonline CRM on Mobile: escape from office
CRM Evolutiion BPMonline
Haab Teleport TV 1.5 functional

Viewers also liked (20)

PPTX
Wcf Part 2
PPT
BPMonline OData
PPTX
G управление лидами
PPTX
Слава Панкратов - Личная эффективность для менеджеров проектов
PPTX
Bp monline boostsalesperfomance
PPTX
Sales Acceleration
PDF
PPTX
BPMonline CRM v 7.0
PPTX
Bp monline on mobile
PPTX
Как разработать и внедрить бизнес-процесс продаж
PPTX
bpmonline crm basic
ODP
SPM Conf 2012 Part II
PPT
Дмитрий Башакин: "Командообразование для тим лидов" (3-часовая версия курса T...
ODP
CodeFest 2013 Maxim Dorofeev Part II
PPT
Максим Дорофеев, выступление на DEV Labs 2010 в Киеве про GTD
PPT
Максим Дорофеев, выступление на DEV Labs 2010 в Киеве про цифры и прогнозы в ...
PPT
Making CRM Implementation Successful
PPT
Александр Орлов, выступление на DEV Labs 2010 в Киеве про ожидания менеджеров...
PPTX
Terrasoft примеры увеличения прибыли
Wcf Part 2
BPMonline OData
G управление лидами
Слава Панкратов - Личная эффективность для менеджеров проектов
Bp monline boostsalesperfomance
Sales Acceleration
BPMonline CRM v 7.0
Bp monline on mobile
Как разработать и внедрить бизнес-процесс продаж
bpmonline crm basic
SPM Conf 2012 Part II
Дмитрий Башакин: "Командообразование для тим лидов" (3-часовая версия курса T...
CodeFest 2013 Maxim Dorofeev Part II
Максим Дорофеев, выступление на DEV Labs 2010 в Киеве про GTD
Максим Дорофеев, выступление на DEV Labs 2010 в Киеве про цифры и прогнозы в ...
Making CRM Implementation Successful
Александр Орлов, выступление на DEV Labs 2010 в Киеве про ожидания менеджеров...
Terrasoft примеры увеличения прибыли
Ad

Similar to WCF Part 1 (20)

PPTX
Реализация REST и SOAP сервисов с помощью WCF
PPT
8 создание приложений по технологии windows communications foundation
PDF
C# Web. Занятие 03.
PPSX
Введение в Windows Communication Foundation
PDF
МАИ, Сети ЭВМ, Лекция №7
PDF
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
PPTX
RESTful API: Best practices, versioning, design documentation
PPTX
Software craftsmanship 17: Microservices interaction
PPTX
Хватит писать инфраструктурный код
PDF
МАИ, Сети ЭВМ, Лекция №4
PPTX
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESB
PPT
7 создание веб сервисов
PPT
RESTful Architechture (Highload++ 2008)
PPT
!2hl++2008 Restful Architechture
PPTX
Мировые информационные ресурсы. Лекция 5
PPTX
Windows communication foundation 4
PDF
Архитектура в Agile: слабая связность
PPT
Что вас ждет на пути реализации Soa (Битрикс отступает)
PDF
Тимур Каримбаев (Ютинет.ру)
PPT
API: взгляд потребителя
Реализация REST и SOAP сервисов с помощью WCF
8 создание приложений по технологии windows communications foundation
C# Web. Занятие 03.
Введение в Windows Communication Foundation
МАИ, Сети ЭВМ, Лекция №7
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
RESTful API: Best practices, versioning, design documentation
Software craftsmanship 17: Microservices interaction
Хватит писать инфраструктурный код
МАИ, Сети ЭВМ, Лекция №4
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESB
7 создание веб сервисов
RESTful Architechture (Highload++ 2008)
!2hl++2008 Restful Architechture
Мировые информационные ресурсы. Лекция 5
Windows communication foundation 4
Архитектура в Agile: слабая связность
Что вас ждет на пути реализации Soa (Битрикс отступает)
Тимур Каримбаев (Ютинет.ру)
API: взгляд потребителя
Ad

WCF Part 1

Editor's Notes

  • #33: OneWay CallDuplex Contract
  • #36: DataContractCodeSnipet:Btn1: Service.ServiceClient client = new Service.ServiceClient();              dataGridView1.DataSource = client.GetTeamOfMyDream();Btn2: Service.ServiceClient client = new Service.ServiceClient();              dataGridView1.DataSource = client.MakeThemYounger((Service.BasketTeam)dataGridView1.DataSource);         
  • #46: В.NET 4 появилась возможность добавлять привязки по умолчанию, не указывая им имя.Теперь если мы в объявлении конечной точки не укажем имя конфигурации привязки, будет использоваться конфигурация полмолчанию для соответствующей привязки.В данном случае basicHttpBinding
  • #47: Также в 4й версии появилась возможность указывать привязку по умолчанию для конкретного протокола