55
Венжик Игорь

WCF Part 1

Embed Size (px)

Citation preview

Page 1: WCF Part 1

Венжик Игорь

Page 2: WCF Part 1

Что такое SOA

Архитектура WCF

WSDL XSD SOAP

Контракты (Contracts)

Привязки (Bindings)

Поведение (Behaviors)

Хостинг (Hosting)

Безопасность

Расширяемость WCF

SOAP vs REST

Маршрутизация. Масштабируемость. Отказоустойчивость

Page 3: WCF Part 1

Что такое SOA

Архитектура WCF

Первый WCF сервис

Page 4: WCF Part 1

Слабое связывание (Loose coupling)

Предсказуемость (Formal contract)

Абстрагирование от реализации(Abstraction)

Автономность (Autonomy)

Повторное использование (Reusability)

Принцип композиции (Composability)

Открытость (Discoverability)

Page 5: WCF Part 1

Клиент Сервис

( + )

Сервис2

( * )

Сервис3

( / )

a+b

a+b*c

a/b

Page 6: WCF Part 1

Четкие границыПересечение границ – четко определено

Пересечение границ стоит ресурсов

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

Сервисы управляются и разрабатываются независимо

Сервис, который мы используем может быт недоступен!

Сервисы предоставляют схему и контракт, но не кодСервисы взаимодействуют по контрактам, которые не меняются.

Сервисы предоставляют только контракт, реализация может меняться и недолжна нас беспокоить

Page 7: WCF Part 1
Page 8: WCF Part 1

Binary .NET-.NET

Communication

Distributed

Transactions

WS-* Specifications

Queued Messaging

Interoperable Web

Services

RESTful

Communication

.NET Remoting

Enterprise Services

Web Services

Enhancements

System.Messaging

ASMX

System.Net Win

do

ws C

om

mu

nic

atio

n

Fo

un

da

tio

n

Page 9: WCF Part 1

Клиент Сервис

СообщениеABC A B C

Адрес

(Где)

Привязки

(Как)

Контракт

(Что)

Конечная точка

(Endpoint)

Page 10: WCF Part 1

Клиент Сервис

СообщениеABC A B C

A B C

Адрес Привязки Контракт

(Где) (Как) (Что)

Page 11: WCF Part 1

Клиент Сервис

СообщениеABC A B C

A B C

Bv Bv

Bv

Page 12: WCF Part 1

Клиент Сервис

СообщениеABC A B C

A B C

Metadata

Bv Bv

Bv

Page 13: WCF Part 1

Клиент Сервис

СообщениеABC A B C

A B C

Metadata

Bv Bv

Bv Bv

ProxyServiceHost<T>()

Hosting Environments

WAS IIS .exeWindowsService

DllHost

Page 14: WCF Part 1

Bin

din

g(К

ак?

)

Address (Где?)

Contract (Что?)

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

Page 15: WCF Part 1
Page 16: WCF Part 1
Page 17: WCF Part 1

WSDL XSD SOAP

Контракты (Contracts)

Привязки (Bindings)

Поведение (Behaviors)

Хостинг (Hosting)

Page 18: WCF Part 1
Page 19: WCF Part 1

WSDL – это язык описания веб-сервисов, основанный на языке XML

WSDL документ состоит из трех логических частей

Определения типов данных – отправляемые и получаемые сервисом XML сообщений(DataContract)

Операции сервиса – список операций, которые может предоставить сервис (ServiceContract)

Связывание сервисов – способ общения с сервисом (Binding)

http://w3.org/TR/wsdl

Page 20: WCF Part 1

Конверт

Заголовок

Action

To

From

Reply-To, Error

Тело

SOAP: Envelope

SOAP: Header

SOAP: Body

Page 21: WCF Part 1

<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>

Page 22: WCF Part 1
Page 23: WCF Part 1
Page 24: WCF Part 1

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

• CLR тип соответствует WSDLService

• Структура данных

• CLR тип соответствует XSDData

• Структура сообщений

• CLR тип соответствует SOAP сообщению

Message

Page 25: WCF Part 1

[ServiceContract]

public interface ICalculator

{

[OperationContract]

ComplexProblem SolveProblem (ComplexProblem p);

}

Page 26: WCF Part 1

SessionMode

NotAllowed

Allowed (default)

Required

Name & Namespace

ProtectionLevel

None

Sign

EncryptAndSign

CallbackContract

Page 27: WCF Part 1

[ServiceContract(CallbackContract=

typeof(ICalculatorResults)]

public interface ICalculatorProblems {

[OperationContract(IsOneWay=true)]

void SolveProblem (ComplexProblem p);

}

public interface ICalculatorResults {

[OperationContract(IsOneWay=true)]

void Results(ComplexProblem p);

}

Page 28: WCF Part 1

IsOneWay

IsInitiating & IsTerminating

Name

AsyncPattern

Action

ReplyAction

ProtectionLevel & HasProtectionLevel

Page 29: WCF Part 1

Дуплексная связь

Page 30: WCF Part 1

[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; }

}

Page 31: WCF Part 1

[MessageContract]

public class ComplexProblem

{

[MessageHeader] public string operation;

[MessageBody]public ComplexNumber n1;

[MessageBody]public ComplexNumber n2;

[MessageBody]public ComplexNumber solution;

// Constructors…

}

Page 32: WCF Part 1

Контракт данных

Page 33: WCF Part 1

[ServiceContract]Методы сервиса отмечаем атрибутом [OperationContract]

На уровне контракта сервиса можно затребовать поддержку сессий (SessionMode)

Можем указать каким методом начитать взаимодействие с сервисом (IsInitiating) и указать каким методом разрывать соединение (IsTerminating)

[DataContract] или [CollectionDataContract]Помним что контракты данных подчиняться общим правилам сериализации. В контракте не может быть циклических ссылок

У всех свойств отмеченных атрибутом [DataMember] должны присутствовать оба аксессора get и set

Если присутствие одного из аксессоров get или setпротиворечит бизнес логике, его можно сделать приватным

[MessageContract]Если метод сервиса принимает контракт сообщения, у него не может быть дополнительных параметров

Page 34: WCF Part 1
Page 35: WCF Part 1
Page 36: WCF Part 1

Транспорт – определяет транспортный протоколобмена сообщениями (Http, Tcp, …)

Кодирование – определяет используемый тип кодирования сообщений

Текст (xml, json, …)

Бинарный

Другие протоколыБезопасность

Гарантированная доставка сообщения

Поддержка транзакций

Привязки — объекты, используемые для задания

сведений о связи, необходимых для подключения к

конечной точке сервиса

Page 37: WCF Part 1

Транспорт Кодировка Security Reliability Протокол

Pipes

MSMQ

Custom

HTTP Text

TCP Binary

MTOM

Custom

Custom Custom

WS-* WS-* WS-*

Custom

WS-* WS-* WS-*HTTP TextTCP Binary

Page 38: WCF Part 1

NP = Named Pipes

T = Transport Security

S = WS-Security

O = One-Way Only

BasicHttpBinding

WsHttpBinding

WsDualHttpBinding

NetTcpBinding

NetNamedPipesBinding

NetMsmqBinding

Http

WS

WS

T

TS

TS

TS

TS

TS

O

O

NetPeerTcpBinding TS

BP

Http

Http

Tcp

NP

MSMQ

P2P

Page 39: WCF Part 1

<?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>

Page 40: WCF Part 1

<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>

Page 41: WCF Part 1

<bindings><basicHttpBinding>

<binding name=""

maxReceivedMessageSize="9999999"><readerQuotas maxArrayLength="9999999"/>

</binding></basicHttpBinding>

</bindings>

<endpoint address=“http://localhost/calculator"binding="basicHttpBinding"bindingConfiguration=""contractType="ICalculator" />

Page 42: WCF Part 1

<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>

Page 43: WCF Part 1

<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>

Page 44: WCF Part 1
Page 45: WCF Part 1
Page 46: WCF Part 1

Поведение сервиса может быть настроено как в коде сервиса так и в конфигурационном файле

Атрибутом ServiceBehavior может быть отмечен только класс, который инкапсулирует в себе весь функционал сервиса

Основные параметрыAddressFilterMode

AutomaticSessionShutdown

ReleaseServiceInstanceOnTransactionComplete

TransactionIsolationLevel

IncludeExceptionDetailInFaults

Page 47: WCF Part 1

Service

InstanceContextMode ConcurrencyMode

PerSession

PerCall

Single

Single

Reentrant

Multiple

PerSession SingleSingle Multiple

Page 48: WCF Part 1

Поведение операций может задаваться только в коде

Атрибутом может быть отмечен только метод конкретного класса реализующего контракт

Основные параметрыImpersonation (олицетворение)

TransactionAutoComplete

TransactionScopeRequired

ReleaseInstanceModeNone

BeforeCall

AfterCall

BeforeAndAfterCall

Page 49: WCF Part 1

[ServiceBehavior(InstanceContextMode =

InstanceContextMode.Single,ConcurrencyMode = ConcurrencyMode.Multiple)]

public class Service : IService {

[OperationBehavior(ReleaseInstanceMode =

ReleaseInstanceMode.AfterCall)]public DateTime GetCurrentDate() {

return DateTime.Now;}

Page 50: WCF Part 1
Page 51: WCF Part 1
Page 52: WCF Part 1

Self-hosting

Console Application

WinForm Application

WPF Application

Internet Information Services (IIS)

Separate (Statealone)

ASP Application

Windows Service

Page 53: WCF Part 1

Http Tcp Named Pipes MSMQ P2P

Console App

WinForm App

WPF App

Windows Service

Web server IIS6

Web server IIS7

Page 54: WCF Part 1
Page 55: WCF Part 1

Вопросы?Пожелания?