SlideShare a Scribd company logo
1 of 56
Download to read offline
МАИ, каф 806, Сети ЭВМ 
WINDOWS COMMUNICATION FOUNDATION 
1
МАИ, каф 806, Сети ЭВМ 
Windows Communication FoundationSOA 
SOA (service oriented architecture) это стиль программирования, где программы представляются в виде набора модулей, называемых сервисами. Сервисы, это группы методов, которые объединены общим набором решаемых требований или целей. 
Основные принципы SOA 
 Границы определены явносервис работает в процессе отделенном от клиента, вызвать сервис можно зная его адрес и контракт. 
 Сервисы являются автономнымиработа одного сервиса не зависит от поведения другого 
 Сервисы описываются схемами и контрактами (а не классами) сервисы должны быть кросс-платформенными, поэтому публикуются только описания сервисов а не программный код 
 Совместимость сервисов базируется на policyнаборе правил, определяющих как обрабатывать сообщения 
2
МАИ, каф 806, Сети ЭВМ 
Windows Communication FoundationREST (Representational State Transfer) 
REST —это не стандарт и не спецификация, а архитектурный стиль, выстроенный на существующих, хорошо известных и контролируемых консорциумом W3C стандартах, таких, как HTTP, URI (Uniform Resource Identifier), XML и RDF (Resource Description Format). 
В REST-сервисах акцент сделан на доступ к ресурсам, а не на исполнение удаленных сервисов; в этом их кардинальное отличие от SOAP-сервисов. Если SOAP-клиенты запрашивают выполнение действия на сервере, то REST-клиенты попросту требуют сам ресурс 
Наипростейший REST-сервис можно реализовать за несколько минут —статичный XML- файл, возвращаемый Web-сервисом, это технически и есть REST-сервис, ведь XML-данные запрашивались через HTTP. Это вряд ли может стать оптимальным способом построения вашей сервисной инфраструктуры, но для статичных или редко меняющихся ресурсов такая возможность весьма привлекательна. 3
МАИ, каф 806, Сети ЭВМ 
Популярность различных подходов к построению API 
4
МАИ, каф 806, Сети ЭВМ 
Windows Communication Foundationструктура сервиса 
5
МАИ, каф 806, Сети ЭВМ 
Windows Communication Foundationтехнологии/xml 
XML –это иерархический, текстовый язык разметки, предоставляющий стандартный способ для представления метаданных в понятном для человека и компьютера виде. 
Для ссылок на другие документы в XMLиспользуются URI 
Namespace используется для уникальной идентификации частей XML документа 
6 
<?xml version=‘1.0’ encoding=‘utf-8’?> <!--A collection of Media Items --> <Collection xmlns="http://example.com/schemas/mediacollection"> <Owner>Janine Labrune</Owner> <Name>Janine’s Media Collection</Name> <Item Media_Type="book"> <Title>The Joy of Rutabagas</Title> <Author> <FirstName>Karl</FirstName> <LastName>Jablonski</LastName> </Author> </Item> <Item Media_Type="video"> <Title>Growing Rutabagas as Pets</Title> <Length>35</Length> <Author> <FirstName>Maria</FirstName> <LastName>Anders</LastName> </Author> </Item> </Collection> 
<p:payload xmlns:p="http://example.com/payload"> <p:owner name="tim" /> <p:text>Payload text</p:text> </p:payload>
МАИ, каф 806, Сети ЭВМ 
Windows Communication Foundationтехнологии/xml schemas 
Схемы –это XML документы, которые описывают структуру типов данных и их свойства. Обычно используется XSD (schema definition language). 
7 
<xsd:schema xmlns="http://example.com/schemas/mediacollection" targetNamespace="http://example.com/schemas/mediacollection" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xsd:element name="Collection"> <xsd:complexType> <xsd:sequence> <xsd:element name="Owner" minOccurs="1" type="xsd:string" /> <xsd:element name="Name" minOccurs="1" type="xsd:string" /> <xsd:element name="Item" minOccurs="0" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name="Title" minOccurs="1" type="xsd:string" /> <xsd:element name="Length" minOccurs="0" type="xsd:int" /> <xsd:element name="Author" minOccurs="0" maxOccurs="1"> <xsd:complexType> <xsd:sequence> <xsd:element name="FirstName" minOccurs="0" maxOccurs="1" type="xsd:string" /> <xsd:element name="LastName" minOccurs="0" maxOccurs="1" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> <xsd:attribute name="Media_Type" type="xsd:string" /> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>
МАИ, каф 806, Сети ЭВМ 8 
Windows Communication Foundationтехнологии/wsdl [1/2] 
WSDL –язык описания веб-сервиса. 
WSDL состоит из двух частей: 
 Абстрактной, описывающей структуру данных и методов веб-сервиса. 
 Конкретной, описывающей, как данный веб- сервис может быть вызван. 
Элементы WSDL 
 Types–описывает типы данных, передаваемые и получаемые веб-сервисом. 
 Message –описывает сообщения, передаваемые по сети при вызове веб- сервисов. 
 PortType–абстрактное описание веб- сервиса. Состоит из описания набора операций, которые могут иметь как входные так и выходные сообщения. 
 Binding–конкретное описание PortType, с указанием протокола, по которому можно вызвать данный сервис. 
 Service–конкретное описание веб-сервиса, которое указывает по какому адресу может быть вызван тот или иной Binding.
МАИ, каф 806, Сети ЭВМ 9 
Windows Communication Foundationтехнологии/wsdl [2/2] 
<?xmlversion="1.0" encoding="utf-8"?> 
<wsdl:definitionsxmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://tempuri.org/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> 
<wsdl:types> 
<s:schemaelementFormDefault="qualified" targetNamespace="http://tempuri.org/"> 
<s:elementname="HelloWorld">… 
<s:elementname="HelloWorldResponse"> 
<s:complexType> 
<s:sequence> 
<s:elementminOccurs="0" maxOccurs="1" name="HelloWorldResult" type="s:string" /> 
</s:sequence> 
</s:complexType> 
</s:element> 
</s:schema> 
</wsdl:types> 
<wsdl:messagename="HelloWorldSoapIn">… 
<wsdl:messagename="HelloWorldSoapOut"> 
<wsdl:partname="parameters" element="tns:HelloWorldResponse" /> 
</wsdl:message> 
<wsdl:portTypename="ServiceSoap"> 
<wsdl:operationname="HelloWorld"> 
<wsdl:inputmessage="tns:HelloWorldSoapIn" /> 
<wsdl:outputmessage="tns:HelloWorldSoapOut" /> 
</wsdl:operation> 
</wsdl:portType> 
<wsdl:bindingname="ServiceSoap" type="tns:ServiceSoap"> 
<soap:bindingtransport="http://schemas.xmlsoap.org/soap/http" /> 
<wsdl:operationname="HelloWorld"> 
<soap:operationsoapAction="http://tempuri.org/HelloWorld" style="document" /> 
<wsdl:input> 
<soap:bodyuse="literal" /> 
</wsdl:input> 
<wsdl:output> 
<soap:bodyuse="literal" /> 
</wsdl:output> 
</wsdl:operation> 
</wsdl:binding> 
<wsdl:bindingname="ServiceSoap12" type="tns:ServiceSoap">… 
<wsdl:servicename="Service"> 
<wsdl:portname="ServiceSoap" binding="tns:ServiceSoap"> 
<soap:addresslocation="http://localhost:1327/Lab1/Service.asmx" /> 
</wsdl:port> 
<wsdl:portname="ServiceSoap12" binding="tns:ServiceSoap12">… 
</wsdl:service> 
</wsdl:definitions>
МАИ, каф 806, Сети ЭВМ 
Windows Communication Foundationтехнологии/ws-inspection 
Способ описания сервисов, предоставляемых сайтом. Представляет собой набор указателей на описание сервисов(http://msdn.microsoft.com/en-us/library/ms951237.aspx). 
10 
<?xml version="1.0"?> 
<inspection xmlns="http://schemas.xmlsoap.org/ws/2001/10/inspection/" 
xmlns:wsiluddi="http://schemas.xmlsoap.org/ws/2001/10/inspection/uddi/"> 
<service> 
<abstract>A stock quote service with two descriptions</abstract> 
<description referencedNamespace="http://schemas.xmlsoap.org/wsdl/" 
location="http://example.com/stockquote.wsdl"/> 
<description referencedNamespace="urn:uddi-org:api"> 
<wsiluddi:serviceDescription location="http://www.example.com/uddi/inquiryapi"> 
<wsiluddi:serviceKey>4FA28580-5C39-11D5-9FCF-BB3200333F79</wsiluddi:serviceKey> 
</wsiluddi:serviceDescription> 
</description> 
</service> 
<service> 
<description referencedNamespace="http://schemas.xmlsoap.org/wsdl/" 
location="ftp://anotherexample.com/tools/calculator.wsdl"/> 
</service> 
<link referencedNamespace="http://schemas.xmlsoap.org/ws/2001/10/inspection/" 
location="http://example.com/moreservices.wsil"/> 
</inspection>
МАИ, каф 806, Сети ЭВМ 11 
Windows Communication Foundationтехнологии/soap 
SimpleObjectAccessProtocol–протокол передачи данных на базе XML. Данные передаются с помощью протокола HTTP. 
Структура SOAP сообщения соответствует WSDL описанию веб- сервиса. 
Примерзапроса 
<?xmlversion="1.0" encoding="utf-8" ?> 
<soap:Envelopexmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<soap:Body> 
<HelloWorldxmlns="http://tempuri.org/"></HelloWorld> 
</soap:Body> 
</soap:Envelope> 
Примерответа 
<?xmlversion="1.0" encoding="utf-8" ?> 
<soap:Envelopexmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<soap:Body> 
<HelloWorldResponsexmlns="http://tempuri.org/"> 
<HelloWorldResult>Hello World! </HelloWorldResult> 
</HelloWorldResponse> 
</soap:Body> 
</soap:Envelope>
МАИ, каф 806, Сети ЭВМ 
Windows Communication Foundationтехнологии/ws-addressing 
WS-Addressing заменила собой спецификацию WS-Routing. WS-Addressing включает в себя механизм для идентификации сообщений (MessageID), определения получателя (To) и объекта, которому должен быть послан ответ (ReplyTo). 
Этот механизм встроен в заголовок SOAP и удлиняет входящие, исходящие сообщения и сообщения об ошибках внутри элемента, определяющего тип порта WSDL с помощью атрибута Action. 12
МАИ, каф 806, Сети ЭВМ 
Windows Communication Foundationтехнологии/ws-addressing 
13 
<soapenv:Envelope xmlns:soapenv='http://www.w3.org/2003/05/soap-envelope'> 
<soapenv:Header xmlns:wsa='http://www.w3.org/2005/08/addressing'> 
<wsa:To>http://localhost:9090/axis2/services/order_service</wsa:To> 
<wsa:Action>http://wso2.org/wsf/c/addr/order</wsa:Action> 
<wsa:ReplyTo> 
<wsa:Address>http://localhost:9090/axis2/services/billing_service</wsa:Address> 
</wsa:ReplyTo> 
<wsa:FaultTo> 
<wsa:Address>http://localhost:9090/axis2/services/reorder_service</wsa:Address> 
</wsa:FaultTo> 
<wsa:MessageID>a4dfb94a-593b-1dc1-36d2-000000000000</wsa:MessageID> 
</soapenv:Header> 
<soapenv:Body> 
<ns1:order xmlns:ns1='http://wso2.org/wsf/c/addr/sample'> 
<item>paper</item> 
<quantity>100</quantity> 
</ns1:order> 
</soapenv:Body> 
</soapenv:Envelope>
МАИ, каф 806, Сети ЭВМ 
Windows Communication Foundationпаттерны обмена сообщениями/запрос-ответ 
Самый распространненый паттерн. Клиент запрашивает информацию отправкой запроса на сервер и ожидает ответное сообщений от сервера. 
Клиент ждет ответа не более чем заранее определенное время (timeout) 
В случае возникновения исключения посылается сообщение с описанием ошибки. 
WCF поддерживает описания удаленных интерфейсов, путем применения атрибутов 
 [ServiceContract] к .NET интерфейсам 
 [OperationContract] к методам интерфейса 
14
МАИ, каф 806, Сети ЭВМ 
Windows Communication Foundationпаттерны обмена сообщениями/one-way 
Сообщения посылаются от клиента к серверу в одном направлении. 
Сервер просто обрабатывает сообщения и не отправляет клиенту ответа или уведомления об обработке сообщения. 
Данный паттерн позволяет работать ассинхронно. 
С помощью данного паттерна можно применять промежуточное по для отправки сообщений, такое как MSMQ. 
15
МАИ, каф 806, Сети ЭВМ 
Windows Communication Foundationпаттерны обмена сообщениями/duplex 
Данный паттерн позволяет серверу посылать дополнительные запросы в сторону клиента в момент выполнения обработки основного запроса. 
Фактически клиент так же выступает в роли сервера, для выполнения call-back операций. 
В .NET есть возможность указать тип Call-Back интерфейса на уровне [Service Contract] 
В WCF есть специальные типы binding, которые поддерживают call-back соединения. 
16
МАИ, каф 806, Сети ЭВМ 
Windows Communication Foundationпаттерны обмена сообщениями/streaming 
Данный паттерн применяется в случае если необходимо передать большой объем информации от сервера к клиенту (или наоборот). 
Информация считывается из файла или базы данных по кускам и передается в сеть. 
Отправитель сам определяет когда закончить передачу данных (какой блок является финальным). 
17
МАИ, каф 806, Сети ЭВМ 
Windows Communication Foundationработа с сообщениями 
Message RoutingНачиная с WCF 4.0 есть поддержка перенаправления сообщений, базируясь на их содержании, с помощью специальных классов, переопределяющих интерфейсы из System.ServiceModel.Routing 
Protocol BindingВ WCF 4.0 есть средства приведения протокола (чтением данных из протокола источника и записью в протокол получатель). 
Message FiltersСуществую средства, которые позволяют описывать какое сообщение каким сервисом должно обрабатываться (Xpath, по телу сообщения) 
Backup Endpoint 
Multicast BehaviourРеализуется с помощью фильтров. Одно сообщение посылается сразу всем сервисам, с подходдящим фильтром. 
Discovery (WS-Discovery) 
Intercepting FiltersПозволяет встраивать логику перед или после обработки основного вызова 
Context Objects 
18
МАИ, каф 806, Сети ЭВМ 19 
Windows Communication Foundation контракты 
Контракт –определяет функциональность, предоставляемую службой и функциональность, которая может быть использованна клиентом. 
Типы контрактов 
 Контракты данных –определяет данные, принимаемые и возвращаемые службой. 
 Контракты службы –используется для определения интерфейса службы; 
 Контракты сообщений –в случае если требуется описывает поведение сообщений, передаваемых при взаимодействии со службой.
МАИ, каф 806, Сети ЭВМ 20 
Windows Communication Foundation контракты служб[1/2] 
Определяет операции, которые может выполнить служба. 
1.[ServiceContract()] 
2.public interface IMyService 
3.{ 
4.[OperationContract] 
5.OutputObject doAction(InputObject parameter); 
6.} 
Свойства ServiceContract 
 ConfigurationName –имя конфигурации службы в конфигурационном файле 
 CallbackContract–используется для дуплексного обмена (см. далее) 
 Name–определяет имя элемента portType 
 Namespace –определяет пространство имен для portType 
 SessionMode –управление сессиями 
 ProtectionLevel–управление защитой коммуникаций
МАИ, каф 806, Сети ЭВМ 21 
Windows Communication Foundation контрактыслужб [2/2] 
Свойства OperationContract 
 Action –Используется для установки соответствия имен операций и SOAPсообщений 
 ReplyAction–то же самое что и Action но для сообщений-ответов 
 AsyncPattern–используется для асинхронного обмена (BeginAsync, EndAsync) 
 IsInitiating–Операция инициирующая сеанс 
 IsTerminating–Операция завершающая сеанс 
 IsOneWay–Клиент не должден ждать результата от сервиса 
 Name–Имя операции (по умолчанию равно имени метода) 
 ProtectionLevel-управление защитой коммуникаций
МАИ, каф 806, Сети ЭВМ 22 
Windows Communication Foundation контракты данных 
Пример 
1.[DataContract] 
2.public class OutputObject 
3.{ 
4.string message; 
5.[DataMember] 
6.public string Message 
7.{ 
8.get { return message; } 
9.set { message = value; } 
10.} 
11.} 
Свойства DataMember 
 Name –служит для изменения имени атрибута 
 Order–определяет порядок сериализации атрибутов 
 IsRequired–элемент обязателен для сериализации (по умолчанию не обязательны) 
 EmitDefaultValue-необходимость передачи значения по умолчанию для поля
МАИ, каф 806, Сети ЭВМ 
Windows Communication Foundation контракты данных/пример 
[DataContract( 
Name="PriceCalculationRequest", Namespace= 
"http://schemas.datacontract.org/2004/07/ 
MyScheme")] 
public class PriceReq 
{ 
[DataMember(Name="PickupDate",Order=1, IsRequired=true )] 
private DateTimeFromDate{ get; set; } 
[DataMember(Name= "ReturnDate", Order = 3)] 
public DateTimeToDate{ get; set; } 
[DataMember( Order = 2)] 
public string PickupLocation{ get; set; } 
[DataMember(Order= 4)] 
public string ReturnLocation{ get; set; } 
public string CarType{ get; set; } 
} 
<xs:complexTypename="PriceCalculationRequest" > 
<xs:sequence> 
<xs:elementminOccurs="0" name="PickupDate" type="xs:dateTime" / > 
<xs:elementminOccurs="0" name="PickupLocation" 
nillable="true" type="xs:string" / > 
<xs:elementminOccurs="0" name="ReturnDate" type="xs:dateTime" / > 
<xs:elementminOccurs="0" name="ReturnLocation" 
nillable="true" type="xs:string" / > 
</xs:sequence> 
</xs:complexType> 
23
МАИ, каф 806, Сети ЭВМ 
Windows Communication Foundation контракты данных/наследование 
Описание на уровне контракта данных, то какие объекты могут передаваться: 
[DataContract] 
[KnownType(typeof(PriceCalculationResponseDetailed))] 
public class PriceCalculationResponse{ 
[DataMember] 
public double Price { get; set; }} 
Описание на уровне метода 
[OperationContract] 
[ServiceKnownType(typeof(PriceCalculationResponseDetailed))] 
PriceCalculationResponse CalculatePrice(PriceCalculationRequest request); 
Описание на уровне сервиса 
[OperationContract] 
[ServiceKnownType(typeof(PriceCalculationResponseDetailed))] 
PriceCalculationResponse CalculatePrice(PriceCalculationRequest request); 
Динамическое описание 
[DataContract] 
[KnownType("GetTypes")] 
public class PriceCalculationResponse{ 
static Type[] GetTypes(){Type[] t = { typeof(PriceCalculationResponseDetailed) };return t; } 
} 
24
МАИ, каф 806, Сети ЭВМ 
Windows Communication Foundation контракты данных/версии 
При модификации программы контракты данных могут менять свою структуру. Для того что бы корректно отрабатывать данную ситуацию необходимо на уровне базового объекта определить возможность расширения: 
[DataContract] 
public class PriceCalculationResponse :IExtensibleDataObject 
{ 
public ExtensionDataObjectExtensionData { get; set; } 
[DataMember] 
public int Flag { get; set; } 
[DataMember] 
public double Price { get; set; } 
[DataMember] 
public string Currency { get; set; } 
} 
25
МАИ, каф 806, Сети ЭВМ 26 
Windows Communication Foundation контракты сообщений 
Используется для контроля над SOAP сообщениями. 
Пример 
1.[MessageContract] 
2.public class MyRequestMessage 
3.{ 
4.[MessageHeader] 
5.public int count; 
6.[MessageBodyMember(Order = 0)] 
7.public String person; 
8.} 
9.[ServiceContract] 
10.public interface IMyRequestHandler 
11.{ 
12.[OperationContract] 
13.bool ProcessRequest(MyRequestMessage msg); 
14.}
МАИ, каф 806, Сети ЭВМ 27 
Windows Communication Foundation пример/cборка с описанием данных и сервиса[1/2] 
1.using System; 
2.using System.Collections.Generic; 
3.using System.ServiceModel; 
4.using System.Runtime.Serialization; 
5.namespace WCFServiceExample 
6.{ 
7.[DataContract] 
8.public class InputObject 
9.{ 
10.string firstName; 
11.string lastName; 
12.[DataMember] 
13.public string FirstName 
14.{ 
15.get { return firstName; } 
16.set { firstName = value; } 
17.} 
18.[DataMember] 
19.public string LastName 
20.{ 
21.get { return lastName; } 
22.set { lastName = value; } 
23.} 
24.} 
25.[DataContract] 
26.public class OutputObject 
27.{ 
28.string message; 
29.[DataMember] 
30.public string Message 
31.{ 
32.get { return message; } 
33.set { message = value; } 
34.} 
35.} 
36.}
МАИ, каф 806, Сети ЭВМ 28 
Windows Communication Foundation пример/cборка с описанием данных и сервиса[2/2] 
1.using System; 
2.using System.Collections.Generic; 
3.using System.Text; 
4.using System.ServiceModel; 
5.using System.Runtime.Serialization; 
6.namespace WCFServiceExample 
7.{ 
8.[ServiceContract()] 
9.public interface IMyService 
10.{ 
11.[OperationContract] 
12.OutputObject doAction(InputObject parameter); 
13.} 
14.public class MyServiceImpl : IMyService 
15.{ 
16.#region IMyService Members 
17.public OutputObject doAction(InputObject parameter) 
18.{ 
19.OutputObject obj = new OutputObject(); 
20.obj.Message = String.Format("Hello {0} {1}!", parameter.FirstName, parameter.LastName); 
21.return obj; 
22.} 
23.#endregion 
24.} 
25.}
МАИ, каф 806, Сети ЭВМ 29 
Windows Communication Foundation пример/хост 
1.using System; 
2.using System.Collections.Generic; 
3.using System.Text; 
4.using WCFServiceExample; 
5.using System.ServiceModel; 
6.using System.ServiceModel.Channels; 
7.using System.Net; 
8.namespace WCFServiceHost 
9.{ 
10.class Program 
11.{ 
12.static void Main(string[] args) { 
13.ServiceHosthost = ConfigureFromFile(); 
14.host.Open(); 
15.Console.WriteLine("Service started"); Console.ReadLine(); 
16.host.Close(); 
17.} 
18.static ServiceHost ConfigureInline() { 
19.Uri base_address = new Uri("http://localhost:8080/MyService"); 
20.ServiceHost host = new ServiceHost(typeof(MyServiceImpl), base_address); 
21.host.AddServiceEndpoint(typeof(IMyService), new WSHttpBinding(), ""); 
22.return host; 
23.} 
24.static ServiceHost ConfigureFromFile() { 
25.ServiceHost host = new ServiceHost(typeof(MyServiceImpl)); 
26.return host; 
27.} 
28.} 
29.}
МАИ, каф 806, Сети ЭВМ 30 
Windows Communication Foundation пример/конфигурация (App.Config) 
1.<?xml version="1.0" encoding="utf-8" ?> 
2.<configuration> 
3.<system.serviceModel> 
4.<services> 
5.<service name ="WCFServiceExample.MyServiceImpl" behaviorConfiguration="MyServiceBehavior"> 
6.<endpoint contract="WCFServiceExample.IMyService" binding="wsHttpBinding"/> 
7.<endpoint contract="IMetadataExchange" binding="wsHttpBinding" address="mex"/> 
8.<host> 
9.<baseAddresses> 
10.<add baseAddress="http://localhost:8080/MyService"/> 
11.</baseAddresses> 
12.</host> 
13.</service> 
14.</services> 
15.<behaviors> 
16.<serviceBehaviors> 
17.<behavior name="MyServiceBehavior" > 
18.<serviceMetadata httpGetEnabled="true" /> 
19.</behavior> 
20.</serviceBehaviors> 
21.</behaviors> 
22.</system.serviceModel> 
23.</configuration>
МАИ, каф 806, Сети ЭВМ 31 
Windows Communication Foundation пример/клиент 
Создаем проект 
Создаем ссылку на службу (Add Web-reference). При этом добавляются сборки System.Runtime.Serializationи System.ServiceModel 
Пишем код 
1.using System; 
2.using System.Collections.Generic; 
3.using System.Text; 
4.using WCFServiceExample; 
5.namespace WCFClient 
6.{ 
7.class Program 
8.{ 
9.static void Main(string[] args) 
10.{ 
11.Console.WriteLine("Connecting to server .."); 
12.InputObject inp = new InputObject(); 
13.inp.LastName = "Ivanov"; 
14.inp.FirstName = "Ivan"; 
15.MyServiceClient srv = new MyServiceClient(); 
16.OutputObject otp = srv.doAction(inp); 
17.Console.WriteLine(otp.Message); 
18.Console.ReadLine(); 
19.} 
20.} 
21.}
МАИ, каф 806, Сети ЭВМ 32 
Windows Communication Foundation пример/клиентская конфигурация 
1.<?xml version="1.0" encoding="utf-8" ?> 
2.<configuration> 
3.<system.serviceModel> 
4.<bindings> 
5.<wsHttpBinding> 
6.<binding name="WSHttpBinding_IMyService" closeTimeout="00:01:00" 
7.openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
8.bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
9.maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
10.messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" 
11.allowCookies="false"> 
12.</binding> 
13.</wsHttpBinding> 
14.</bindings> 
15.<client> 
16.<endpoint address="http://localhost:8080/MyService" binding="wsHttpBinding" 
17.bindingConfiguration="WSHttpBinding_IMyService" contract="IMyService" 
18.name="WSHttpBinding_IMyService"> 
19.</endpoint> 
20.</client> 
21.</system.serviceModel> 
22.</configuration>
МАИ, каф 806, Сети ЭВМ 33 
Windows Communication Foundationbinding 
Binding определяет как служба будет взаимодействовать с клиентами. А именно: 
 Адрес; 
 Транспортный протокол; 
 Требования к безопасности; 
 Формат кодирования; 
 Требования транзакций; 
Определяются на уровне создания хоста сервиса;
МАИ, каф 806, Сети ЭВМ 34 
Windows Communication Foundation ServiceBehavior 
ServiceBehavior определяется на уровне класса, реализующего ServiceContract (наследующего интерфейс). Описывает доп. функциональность, для службы. 
Пример 
1.[ServiceBehavior] 
2.public class MyServiceImpl : IMyService 
3.{ 
4.public OutputObject doAction(InputObject parameter) 
5.{return new OutputObject();} 
6.} 
Значения 
 TransactionAutoCompleteOnSessionClose –аналог [AutoComplete] 
 TransactionIsolationLevel –уровень изоляции транзакций 
 ReleaseServiceInstanceOnTransactionComplete–Позволяет повторное использование экземпляра объекта 
 AutomaticSessionShutdown–Разрывает сеанс при окончании вызова 
 InstanceContextMode–Аналог SingleCall/Singleton в Remoting 
 ConcurrencyMode –Управление множественным доступом к службе из разных клиентов(single/multi) 
 UseSynchronizationContext–Для внутренних служб WinForms, что бы создавать службу в потоке, в котором она инициируется 
 IncludeExceptionDetailInDaults–Включать в Exception развернутое описание ошибки 
 MaxItemsInObjectGraph–ограничение числа передаваемых объектов 
 AddressFilterMode: Управление фильром сообщений: Any , Exact , and Prefix .. 
 IgnoreExtensionDataObject: Если установленно в true то расширения не передаются..
МАИ, каф 806, Сети ЭВМ 
Windows Communication Foundation metadata publishing 
ServiceHosthost = new ServiceHost(typeof(MyService)); 
ServiceMetadataBehaviorserviceMetadata= 
host.Description.Behaviors.Find< ServiceMetadataBehavior> (); 
if (serviceMetadata== null) 
{ 
serviceMetadata= new ServiceMetadataBehavior(); 
host.Description.Behaviors.Add(serviceMetadata); 
} 
serviceMetadata.HttpGetEnabled= true; 
BasicHttpBindingbinding = new BasicHttpBinding(); 
host.AddServiceEndpoint(typeof(IMyService), 
Binding,"http://localhost:8080/MyService"); 
35
МАИ, каф 806, Сети ЭВМ 36 
Windows Communication Foundation OperationBehavior 
Применяется к методам класса, реализующего интерфейс с ServiceContract 
Значения 
 AutoDisposeParameters –если стоит true –то за очистку параметров отвечает сервер, иначе –клиент. 
 Impersonation–позволяет идентифицировать вызывающего; 
 ReleaseInstanceMode–определяет режим освобождения экземпляра (на уровне операции); 
 TransactionScopeRequired–требуется ли транзакция или нет; 
 TransactionAutoComplete–должна ли транзакция завершаться автоматически или нет;
МАИ, каф 806, Сети ЭВМ 
Windows Communication Foundation OperationBehavior/пример 
using System; 
using Wrox.CarRentalService.Contracts; 
namespace Wrox.CarRentalService.Implementations.Europe 
{ 
public class CarRentalService: ICarRentalService 
{ 
[OperationBehavior( 
AutoDisposeParameters= true, 
Impersonation = ImpersonationOption.NotAllowed, 
ReleaseInstanceMode= ReleaseInstanceMode.None, 
TransactionAutoComplete= true, 
TransactionScopeRequired= false)] 
double CalculatePrice(DateTimepickupDate, DateTimereturnDate,stringpickupLocation, string vehiclePreference) 
{ 
// method code here 
} 
} 
} 
37
МАИ, каф 806, Сети ЭВМ 
Windows Communication Foundation endpoint behaviour/пример 
CarRentalServiceClientclient = new CarRentalServiceClient(); 
try 
{ 
client.ClientCredentials.ClientCertificate.SetCertificate( 
StoreLocation.CurrentUser, 
StoreName.My, 
X509FindType.FindBySubjectDistinguishedName, 
"CN=client_cert"); 
// other code 
client.Close(); 
} 
catch (Exception ex) 
{ 
client.Abort(); 
throw; 
} 
ServiceHosthost = new ServiceHost(typeof(CarRentalService)); 
try 
{ 
BasicHttpBindingbinding = new BasicHttpBinding(); 
ServiceEndpointserviceEndpoint= 
host.AddServiceEndpoint(typeof(ICarRentalService), 
binding, 
"http://localhost:8080/CarRentalService"); 
ServiceCredentialscredentials = new ServiceCredentials(); 
credentials.ServiceCertificate.SetCertificate( 
StoreLocation.CurrentUser, 
StoreName.My, 
X509FindType.FindBySubjectDistinguishedName, 
"CN=service_cert"); 
host.Open(); 
// other code here ... 
host.Close(); 
38
МАИ, каф 806, Сети ЭВМ 
Windows Communication Foundationстандартные binding 
39
МАИ, каф 806, Сети ЭВМ 
Windows Communication Foundation клиенты 
40
МАИ, каф 806, Сети ЭВМ 41 
Windows Communication Foundation клиенты 
Клиентскому приложению для получения доступа к службе нужен прокси. Его можно создать: 
 Visual Studio –Add Service Reference 
 Инструмент svcutil.exe 
 Класс ChannelFactory<TChannel> 
Пример 
1.static OutputObject UseChannelFactory(InputObject inp) 
2.{ 
3.WSHttpBinding binding = new WSHttpBinding(); 
4.EndpointAddress address = new EndpointAddress("http://localhost:8080/MyService"); 
5.ChannelFactory<IMyService> factory = new ChannelFactory<IMyService>(binding, address); 
6.try 
7.{ 
8.IMyService service = factory.CreateChannel(); 
9.return service.doAction(inp); 
10.} 
11.finally 
12.{ 
13.factory.Close(); 
14.} 
15.}
МАИ, каф 806, Сети ЭВМ 42 
Windows Communication Foundation дуплексная коммуникация 
При дуплексной коммуникации служба может вызывать клиента; 
Канал должен быть дуплексным; 
На стороне клиента описывается контракт, который прописывается на сервере в свойстве CallbackContract; 
1.[ServiceContract(CallbackContract=typeof(ICalculatorDuplexCallback))] 
2.public interface ICalculatorDuplex{ 
3.[OperationContract(IsOneWay = true)] 
4.void AddTo(double n); 
5.} 
Клиент 
1.public interface ICalculatorDuplexCallback{ 
2.[OperationContract(IsOneWay = true)] 
3.void Equals(double result); 
4.} 
Вызов клиента на сервере 
callback = 
OperationContext.Current.GetCallbackChannel<ICalculatorDuplexCallback>();
МАИ, каф 806, Сети ЭВМ 43 
Windows Communication Foundation использование HTTPS и NTLM авторизации 
1.<?xml version="1.0" encoding="utf-8" ?> 
2.<configuration> 
3.<system.serviceModel> 
4.<bindings> 
5.<basicHttpBinding> 
6.<binding name="ClientServiceSoap" closeTimeout="00:01:00" openTimeout="00:01:00" 
7.receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" 
8.bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
9.maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
10.messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
11.useDefaultWebProxy="true"> 
12.<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
13.maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
14.<security mode="Transport"> 
15.<transport clientCredentialType="Ntlm" realm="tfs.sitels.ru" /> 
16.<message clientCredentialType="UserName" algorithmSuite="Default" /> 
17.</security> 
18.</binding> 
19.</basicHttpBinding> 
20.</bindings> 
21.<client> 
22.<endpoint address="https://tfs.sitels.ru:8081/WorkItemTracking/v1.0/ClientService.asmx" 
23.binding="basicHttpBinding" 
24.bindingConfiguration="ClientServiceSoap" 
25.contract="TFSService.ClientServiceSoap" name="ClientServiceSoap" /> 
26.</client> 
27.</system.serviceModel> 
28.</configuration>
МАИ, каф 806, Сети ЭВМ 44 
Windows Communication Foundation потоковые данные 
Устанавливаем transferMode="Streamed" в Binding (клиента и сервера). 
Устанавливаем <httpRuntime maxRequestLength="65536"/> (сервер) 
Описываем MessageContract (должен быть тип данных с потоком 
[MessageContract] public class FileUploadMessage{ [MessageHeader(MustUnderstand = true)] public DataContracts.DnvsDnvxSession DnvxSession[MessageHeader(MustUnderstand = true)] public DataContracts.EApprovalContext Context[MessageHeader(MustUnderstand = true)] public DataContracts.FileMetaData FileMetaData[MessageBodyMember(Order = 1)] public System.IO.Stream FileByteStream} 
Описываем серверный контракт 
[OperationContract(Action = "UploadFile", IsOneWay = true)] 
void UploadFile(ServiceContracts.FileUploadMessage request); 
Реализуем сервер 
public void UploadFile(FileUploadMessage request) { Stream sourceStream = request.FileByteStream; 
…
МАИ, каф 806, Сети ЭВМ 
Windows Communication Foundationinstancecontectmode/PerCall 
// Per Call 
[ServiceBehavior( 
InstanceContextMode = InstanceContextMode.PerCall)] 
public class CarRentalService: ICarRentalService 
{ 
… 
//Singleton 
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, 
ConcurrencyMode = ConcurrencyMode. Multiple )] 
public class CarRentalService: ICarRentalService 
{ 
… 
// Per session 
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] 
public class CarRentalService: ICarRentalService 
{ 
… 
PerCall 
 При каждом новом вызове сервера создается новый экземпляр объекта на сервере. 
 Очень удобно для масштабирования. 
 Накладные расходы на создание объекта. 
Singleton 
 Используется один экземплярвсегда. 
 Необходимо установить ConcurrencyMode.Multiple 
PerSession 
 Каждый клиент взаимодействует всегда с одним и тем же сервером. 
 Взаимодействие обрывается по таймауту или по прерывании сессии клиентом (вызов метода Close). 
45
МАИ, каф 806, Сети ЭВМ 
Windows Communication FoundationserviceThrottling Behavior 
< serviceBehaviors > 
< behavior name="throttlingBehavior" > 
< serviceThrottling 
maxConcurrentCalls ="5" 
maxConcurrentSessions="2" 
maxConcurrentInstances="3" / > 
< /behavior > 
< /serviceBehaviors > 
Включение счетчиков производительности 
< system.serviceModel > 
< diagnostics performanceCounters="All"/ > 
< /system.serviceModel > 
Позволяет управлять нагрузкой на сервер 
Ограничивает максимальное число параллельно выполняемых процессов 
Максимальное число параллельно поддерживаемых сессий 
Максимальное число одновременно загруженных в память объектов сервера 
46
МАИ, каф 806, Сети ЭВМ 
Windows Communication FoundationConcurrencyMode 
Устанавливается ServiceBehavior 
По умолчанию, ConcurrencyMode.Single 
 У одному объекту может обращаться только один поток (клиент) 
 Нет проблем с разделяемым доступом к ресурсам 
ConcurrencyMode.Multiple 
 Любое количество потоков может обращаться к объекту 
 Необходимо решать проблемы с разделяемым доступом 
Имеет значение если вы разрабатываете многопоточный клиент с методом доступа PerSession или Singleton. 
В случае PerCall –на каждый запрос и так создается новый серверный объект. 
47
МАИ, каф 806, Сети ЭВМ 48 
Windows Communication Foundation итого 
Комбинирует функциональность Web-Service, .NET Remoting, MSMQ и Enterprise Services; 
Включает средства для обеспечения: 
 Настраиваемый хостинг компонентов и служб; 
 Декларативное поведение; 
 Различные коммуникационные каналы (HTTP, TXP, ...); 
 Инфраструктура безопасности; 
 Расширяемость (сбоственные каналы, форматировщики и прокси); 
 Поддержка предшествующих технологий (например можно сделать WCF сервис, взаимодействующий с Web Service)
МАИ, каф 806, Сети ЭВМ 
RESTSystem.ServiceModel.Web 
Используется расширение WebGetи WebInvokeдлOperationContractи webHttpBinding 
[ServiceContract()] 
publicinterfaceICarRentalService 
{ 
[OperationContract] 
[WebGet(UriTemplate= "/CarPool")] 
CarPoolGetAllCars(); 
[OperationContract] 
[WebGet(UriTemplate= "/CarPool/{carName}?format=xml",ResponseFormat= WebMessageFormat.Xml)] 
Car GetCarXML(string carName); 
[OperationContract] 
[WebGet(UriTemplate= "/CarPool/{carName}?format=json",ResponseFormat= WebMessageFormat.Json)] 
Car GetCarJSON(string carName); 
[OperationContract] 
[WebInvoke(UriTemplate= "CarPool/{carName}", Method = "PUT")] 
Car AddCar(string carName, Car car); 
[OperationContract] 
[WebInvoke(UriTemplate= "/CarPool/{carName}", Method = "DELETE")] 
void DeleteCar(string carName); 
} 
49
МАИ, каф 806, Сети ЭВМ 
Что почитать? 
PROFESSIONAL 
WCF 4 
WINDOWS COMMUNICATION FOUNDATION WITH .NET 4 
Pablo Cibraro Kurt Claeys Fabio Cozzolino Johann Grabner 
50
МАИ, каф 806, Сети ЭВМ 
AXIS2 
Web-services & java 
51
МАИ, каф 806, Сети ЭВМ 
AXIS2 
Класс ServiceClient –простой прием и отправка XML сообщений 
ServiceClientимеет следующий набор API 
 sendRobust –просто отправка XML без ожидания ответа, но с получением Exception в случае ошибуи. 
 FireAndForget–просто отправка XML без ожидания ответа или исключения 
 SendRecieve–отправка запроса и получение ответа 
 SendReceiveNonBlocking–То же что и SendReceive но с получением ответа через CallBack объект. 
Трансортный уровень 
 HTTP/HTTPS 
 TCP (только совместно с WS-Addressing) 
 SMTP (требует e-mail аккаунт) 
 JMS (будет рассматриватся в лекции про очереди сообщений) 
 XMPP (jabber сервера http://xmpp.org/) 
Кодогенерация –для упрощения вызова удаленных сервисов и публикации своих. 
52
МАИ, каф 806, Сети ЭВМ 53 
Web.Service. Java. AXIS 
Используется библиотека Apache Axis2 
Доступна для скачивания http://ws.apache.org/axis/ 
Включает в себя 
 Сервер, для запуска Веб-сервисов 
 Сервер, для встраивания в Tomcat 
 Поддержка WSDL 
 Средства генерации Java-классов по WSDL 
Для написания сервера необходимо: 
 Написания Java-класса «сервера» 
 Запуска сервера либо в составе J2EE сервера, либо Online 
 Для запуска Online необходимо воспользоваться классомorg.apache.axis2.engine.AxisServer 
 Сервис будет доступен по адресу http://localhost:6060/axis/services/ИмяКласса 
 Где ИмяКласса –имя вашего класса, который вы опубликовали в виде сервиса.
МАИ, каф 806, Сети ЭВМ 54 
Web.Service. Java. AXIS. Сервер 
1.publicclassMyService { 
2.// всеpublic методы станут доступны как методы веб-сервиса (очень удобно) 
3.publicint[] doHelloWorld(int[]src) 
4.{ 
5.int[] result = newint[src.length]; 
6.for(inti=0;i<src.length;i++) result[i]=src[src.length-i-1]; 
7.returnresult; 
8.} 
9.// вообще говоря, исключения надо обрабатывать корректно 
10.publicstaticvoidmain(String[] args) throwsException 
11.{ 
12.// запускаем сервис 
13.neworg.apache.axis2.engine.AxisServer().deployService( 
14.MyService.class.getName()); 
15.} 
16.}
МАИ, каф 806, Сети ЭВМ 
AXIS2 Client 
Клиент делается ещё проще:просто запускаем кодогенерациюпо URI wsdlили wsdl-файлу. 
java -classpathaxis2-codegen-1.6.1.jar;axis2-kernel-1.6.1.jar;wsdl4j-1.6.2.jar;commons-logging- 1.1.1.jar;neethi-3.0.1.jar;axiom-api-1.2.12.jar;axiom-dom-1.2.12.jar;axiom-impl- 1.2.12.jar;XmlSchema-1.4.7.jar;axis2-adb-codegen-1.6.1.jar;axis2-adb-1.6.1.jar org.apache.axis2.wsdl.WSDL2Java -urihttp://localhost:6060/axis2/services/MyServer?wsdl 
Получается набор файлов: 
 MyServiceStub.java–заглушка сервиса 
 MyServiceStubExceptionException0.java–исключение, генерируемоесервисом 
 MyServiceStubCallbackHandler.java–callback объект для неблокируемых вызовов 
55
МАИ, каф 806, Сети ЭВМ 56 
Web.Service. Java. AXIS. Клиент 
1.import org.apache.ws.axis2.MyServiceStub; 
2.public class MyClient 
3.{ 
4.public static void main(String[] argv) throws Exception 
5.{ 
6.MyServiceStub stub = new MyServiceStub(); 
7.MyServiceStub.DoHelloWorld request = new MyServiceStub.DoHelloWorld(); 
8.request.setSrc(new int[] {1,2,3,4,5}); 
9.MyServiceStub.DoHelloWorldResponse result = stub.doHelloWorld(request); 
10.if(result!=null) 
11.{ 
12.if(result.get_return()!=null) 
13.for(int i=0;i<result.get_return().length;i++) 
14.System.out.println("["+result.get_return()[i]+"]"); 
15.} 
16.} 
17.}

More Related Content

What's hot

Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5Technopark
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3Technopark
 
Проектирование программных систем. Занятие 10
Проектирование программных систем. Занятие 10Проектирование программных систем. Занятие 10
Проектирование программных систем. Занятие 10Dima Dzuba
 
Сетевое взаимодействие
Сетевое взаимодействиеСетевое взаимодействие
Сетевое взаимодействиеUnguryan Vitaliy
 
Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6Technopark
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node jsAlex Tumanoff
 
C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.Igor Shkulipa
 
Cookies, session и другое в JSP
Cookies, session и другое в JSPCookies, session и другое в JSP
Cookies, session и другое в JSPUnguryan Vitaliy
 
C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.Igor Shkulipa
 
Введение в hibernate
Введение в hibernateВведение в hibernate
Введение в hibernateUnguryan Vitaliy
 
Java осень 2014 занятие 7
Java осень 2014 занятие 7Java осень 2014 занятие 7
Java осень 2014 занятие 7Technopark
 
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet APIПротокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet APIEkaterina Kuchinskaya
 
Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.Anton Moiseenko
 
C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.Igor Shkulipa
 
C++ Базовый. Занятие 13.
C++ Базовый. Занятие 13.C++ Базовый. Занятие 13.
C++ Базовый. Занятие 13.Igor Shkulipa
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.Igor Shkulipa
 
Java. Многопоточность.
Java. Многопоточность.Java. Многопоточность.
Java. Многопоточность.Unguryan Vitaliy
 

What's hot (20)

Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3
 
Проектирование программных систем. Занятие 10
Проектирование программных систем. Занятие 10Проектирование программных систем. Занятие 10
Проектирование программных систем. Занятие 10
 
Сетевое взаимодействие
Сетевое взаимодействиеСетевое взаимодействие
Сетевое взаимодействие
 
Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node js
 
C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.
 
Cookies, session и другое в JSP
Cookies, session и другое в JSPCookies, session и другое в JSP
Cookies, session и другое в JSP
 
C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.
 
Введение в hibernate
Введение в hibernateВведение в hibernate
Введение в hibernate
 
Java осень 2014 занятие 7
Java осень 2014 занятие 7Java осень 2014 занятие 7
Java осень 2014 занятие 7
 
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet APIПротокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
Протокол HTTP. Клиент-серверная модель взаимодействия. Servlet API
 
Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.
 
Bytecode
BytecodeBytecode
Bytecode
 
C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.
 
java
javajava
java
 
C++ Базовый. Занятие 13.
C++ Базовый. Занятие 13.C++ Базовый. Занятие 13.
C++ Базовый. Занятие 13.
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.
 
Step 7
Step 7Step 7
Step 7
 
Java. Многопоточность.
Java. Многопоточность.Java. Многопоточность.
Java. Многопоточность.
 

Similar to МАИ, Сети ЭВМ, Лекция №7

Технология создания веб-сервисов на базе стандарта JAX-WS & JAXB
Технология создания веб-сервисов на базе стандарта JAX-WS & JAXBТехнология создания веб-сервисов на базе стандарта JAX-WS & JAXB
Технология создания веб-сервисов на базе стандарта JAX-WS & JAXBFedor Malyshkin
 
Мировые информационные ресурсы. Лекция 5
Мировые информационные ресурсы. Лекция 5Мировые информационные ресурсы. Лекция 5
Мировые информационные ресурсы. Лекция 5Dmitriy Krukov
 
Enterpise&Webservices
Enterpise&WebservicesEnterpise&Webservices
Enterpise&Webservicesscassau
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NETPositive Hack Days
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.Igor Shkulipa
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXMLSlach
 
Open protocols as base for social distributed networks
Open protocols as base for social distributed networksOpen protocols as base for social distributed networks
Open protocols as base for social distributed networksТранслируем.бел
 
Distributed nets
Distributed netsDistributed nets
Distributed netszagru
 
IBM DataPower In SameTime
IBM DataPower In SameTimeIBM DataPower In SameTime
IBM DataPower In SameTimeIBM IBM
 
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...CocoaHeads
 
Павел Кудинов: Высоконагруженные приложения как совокупность веб-сервисов
Павел Кудинов: Высоконагруженные приложения как совокупность веб-сервисовПавел Кудинов: Высоконагруженные приложения как совокупность веб-сервисов
Павел Кудинов: Высоконагруженные приложения как совокупность веб-сервисовguestf673
 
Лекция 1. Модель OSI.
Лекция 1. Модель OSI.Лекция 1. Модель OSI.
Лекция 1. Модель OSI.Alexey Furmanov
 
!2hl++2008 Restful Architechture
!2hl++2008 Restful Architechture!2hl++2008 Restful Architechture
!2hl++2008 Restful ArchitechtureOntico
 
RESTful Architechture (Highload++ 2008)
RESTful Architechture (Highload++ 2008)RESTful Architechture (Highload++ 2008)
RESTful Architechture (Highload++ 2008)Sergey Skvortsov
 
СЭД, которой можно доверять
СЭД, которой можно доверятьСЭД, которой можно доверять
СЭД, которой можно доверятьИнтерТраст
 
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Yandex
 
Sql Server Data Services
Sql Server Data ServicesSql Server Data Services
Sql Server Data ServicesMedia Gorod
 
Современный подход к локализации на примере одного проекта
Современный подход к локализации на примере одного проектаСовременный подход к локализации на примере одного проекта
Современный подход к локализации на примере одного проектаSQALab
 

Similar to МАИ, Сети ЭВМ, Лекция №7 (20)

Технология создания веб-сервисов на базе стандарта JAX-WS & JAXB
Технология создания веб-сервисов на базе стандарта JAX-WS & JAXBТехнология создания веб-сервисов на базе стандарта JAX-WS & JAXB
Технология создания веб-сервисов на базе стандарта JAX-WS & JAXB
 
Мировые информационные ресурсы. Лекция 5
Мировые информационные ресурсы. Лекция 5Мировые информационные ресурсы. Лекция 5
Мировые информационные ресурсы. Лекция 5
 
Enterpise&Webservices
Enterpise&WebservicesEnterpise&Webservices
Enterpise&Webservices
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXML
 
Open protocols as base for social distributed networks
Open protocols as base for social distributed networksOpen protocols as base for social distributed networks
Open protocols as base for social distributed networks
 
Uws
UwsUws
Uws
 
Distributed nets
Distributed netsDistributed nets
Distributed nets
 
IBM DataPower In SameTime
IBM DataPower In SameTimeIBM DataPower In SameTime
IBM DataPower In SameTime
 
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
 
Павел Кудинов: Высоконагруженные приложения как совокупность веб-сервисов
Павел Кудинов: Высоконагруженные приложения как совокупность веб-сервисовПавел Кудинов: Высоконагруженные приложения как совокупность веб-сервисов
Павел Кудинов: Высоконагруженные приложения как совокупность веб-сервисов
 
REST API JL.elama
REST API JL.elamaREST API JL.elama
REST API JL.elama
 
Лекция 1. Модель OSI.
Лекция 1. Модель OSI.Лекция 1. Модель OSI.
Лекция 1. Модель OSI.
 
!2hl++2008 Restful Architechture
!2hl++2008 Restful Architechture!2hl++2008 Restful Architechture
!2hl++2008 Restful Architechture
 
RESTful Architechture (Highload++ 2008)
RESTful Architechture (Highload++ 2008)RESTful Architechture (Highload++ 2008)
RESTful Architechture (Highload++ 2008)
 
СЭД, которой можно доверять
СЭД, которой можно доверятьСЭД, которой можно доверять
СЭД, которой можно доверять
 
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
Алексей Андросов "Яндекс.Почта: архитектура фронтенда как она есть"
 
Sql Server Data Services
Sql Server Data ServicesSql Server Data Services
Sql Server Data Services
 
Современный подход к локализации на примере одного проекта
Современный подход к локализации на примере одного проектаСовременный подход к локализации на примере одного проекта
Современный подход к локализации на примере одного проекта
 

More from Dima Dzuba

Объектно-ориентированное программирование. Лекции 13 и 14
Объектно-ориентированное программирование. Лекции 13 и 14Объектно-ориентированное программирование. Лекции 13 и 14
Объектно-ориентированное программирование. Лекции 13 и 14Dima Dzuba
 
Объектно-ориентированное программирование. Лекции 11 и 12
Объектно-ориентированное программирование. Лекции 11 и 12Объектно-ориентированное программирование. Лекции 11 и 12
Объектно-ориентированное программирование. Лекции 11 и 12Dima Dzuba
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Dima Dzuba
 
Requirement modelling in software creation process
Requirement modelling in software creation processRequirement modelling in software creation process
Requirement modelling in software creation processDima Dzuba
 
Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8. Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8. Dima Dzuba
 
Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Dima Dzuba
 
Модифицируемость программных систем
Модифицируемость программных системМодифицируемость программных систем
Модифицируемость программных системDima Dzuba
 
Производительность программных систем
Производительность программных системПроизводительность программных систем
Производительность программных системDima Dzuba
 
Проектирование Программных Систем. Лекция 01
Проектирование Программных Систем. Лекция 01Проектирование Программных Систем. Лекция 01
Проектирование Программных Систем. Лекция 01Dima Dzuba
 
МАИ, Сети ЭВМ, Лекция №6
МАИ, Сети ЭВМ, Лекция №6МАИ, Сети ЭВМ, Лекция №6
МАИ, Сети ЭВМ, Лекция №6Dima Dzuba
 
МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3Dima Dzuba
 
МАИ, Сети ЭВМ, Лекция №2
МАИ, Сети ЭВМ, Лекция №2МАИ, Сети ЭВМ, Лекция №2
МАИ, Сети ЭВМ, Лекция №2Dima Dzuba
 
МАИ, Сети ЭВМ, Лекция №1
МАИ, Сети ЭВМ, Лекция №1МАИ, Сети ЭВМ, Лекция №1
МАИ, Сети ЭВМ, Лекция №1Dima Dzuba
 
Решение конфликтов в процессе проектирования сложных систем
Решение конфликтов в процессе проектирования сложных системРешение конфликтов в процессе проектирования сложных систем
Решение конфликтов в процессе проектирования сложных системDima Dzuba
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Dima Dzuba
 
Arch intro4sts
Arch intro4stsArch intro4sts
Arch intro4stsDima Dzuba
 
Проектирование программных систем. Занятие 9
Проектирование программных систем. Занятие 9Проектирование программных систем. Занятие 9
Проектирование программных систем. Занятие 9Dima Dzuba
 
Проектирование программных систем. Занятие 8
Проектирование программных систем. Занятие 8Проектирование программных систем. Занятие 8
Проектирование программных систем. Занятие 8Dima Dzuba
 
Проектирование программных систем. Занятие 7
Проектирование программных систем. Занятие 7Проектирование программных систем. Занятие 7
Проектирование программных систем. Занятие 7Dima Dzuba
 

More from Dima Dzuba (20)

Объектно-ориентированное программирование. Лекции 13 и 14
Объектно-ориентированное программирование. Лекции 13 и 14Объектно-ориентированное программирование. Лекции 13 и 14
Объектно-ориентированное программирование. Лекции 13 и 14
 
Объектно-ориентированное программирование. Лекции 11 и 12
Объектно-ориентированное программирование. Лекции 11 и 12Объектно-ориентированное программирование. Лекции 11 и 12
Объектно-ориентированное программирование. Лекции 11 и 12
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10
 
Requirement modelling in software creation process
Requirement modelling in software creation processRequirement modelling in software creation process
Requirement modelling in software creation process
 
Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8. Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8.
 
Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6Объектно-ориентированное программирование. Лекция 5 и 6
Объектно-ориентированное программирование. Лекция 5 и 6
 
Модифицируемость программных систем
Модифицируемость программных системМодифицируемость программных систем
Модифицируемость программных систем
 
Производительность программных систем
Производительность программных системПроизводительность программных систем
Производительность программных систем
 
Проектирование Программных Систем. Лекция 01
Проектирование Программных Систем. Лекция 01Проектирование Программных Систем. Лекция 01
Проектирование Программных Систем. Лекция 01
 
МАИ, Сети ЭВМ, Лекция №6
МАИ, Сети ЭВМ, Лекция №6МАИ, Сети ЭВМ, Лекция №6
МАИ, Сети ЭВМ, Лекция №6
 
МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3
 
МАИ, Сети ЭВМ, Лекция №2
МАИ, Сети ЭВМ, Лекция №2МАИ, Сети ЭВМ, Лекция №2
МАИ, Сети ЭВМ, Лекция №2
 
МАИ, Сети ЭВМ, Лекция №1
МАИ, Сети ЭВМ, Лекция №1МАИ, Сети ЭВМ, Лекция №1
МАИ, Сети ЭВМ, Лекция №1
 
Решение конфликтов в процессе проектирования сложных систем
Решение конфликтов в процессе проектирования сложных системРешение конфликтов в процессе проектирования сложных систем
Решение конфликтов в процессе проектирования сложных систем
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
 
Arch intro4sts
Arch intro4stsArch intro4sts
Arch intro4sts
 
Проектирование программных систем. Занятие 9
Проектирование программных систем. Занятие 9Проектирование программных систем. Занятие 9
Проектирование программных систем. Занятие 9
 
Проектирование программных систем. Занятие 8
Проектирование программных систем. Занятие 8Проектирование программных систем. Занятие 8
Проектирование программных систем. Занятие 8
 
Проектирование программных систем. Занятие 7
Проектирование программных систем. Занятие 7Проектирование программных систем. Занятие 7
Проектирование программных систем. Занятие 7
 

МАИ, Сети ЭВМ, Лекция №7

  • 1. МАИ, каф 806, Сети ЭВМ WINDOWS COMMUNICATION FOUNDATION 1
  • 2. МАИ, каф 806, Сети ЭВМ Windows Communication FoundationSOA SOA (service oriented architecture) это стиль программирования, где программы представляются в виде набора модулей, называемых сервисами. Сервисы, это группы методов, которые объединены общим набором решаемых требований или целей. Основные принципы SOA  Границы определены явносервис работает в процессе отделенном от клиента, вызвать сервис можно зная его адрес и контракт.  Сервисы являются автономнымиработа одного сервиса не зависит от поведения другого  Сервисы описываются схемами и контрактами (а не классами) сервисы должны быть кросс-платформенными, поэтому публикуются только описания сервисов а не программный код  Совместимость сервисов базируется на policyнаборе правил, определяющих как обрабатывать сообщения 2
  • 3. МАИ, каф 806, Сети ЭВМ Windows Communication FoundationREST (Representational State Transfer) REST —это не стандарт и не спецификация, а архитектурный стиль, выстроенный на существующих, хорошо известных и контролируемых консорциумом W3C стандартах, таких, как HTTP, URI (Uniform Resource Identifier), XML и RDF (Resource Description Format). В REST-сервисах акцент сделан на доступ к ресурсам, а не на исполнение удаленных сервисов; в этом их кардинальное отличие от SOAP-сервисов. Если SOAP-клиенты запрашивают выполнение действия на сервере, то REST-клиенты попросту требуют сам ресурс Наипростейший REST-сервис можно реализовать за несколько минут —статичный XML- файл, возвращаемый Web-сервисом, это технически и есть REST-сервис, ведь XML-данные запрашивались через HTTP. Это вряд ли может стать оптимальным способом построения вашей сервисной инфраструктуры, но для статичных или редко меняющихся ресурсов такая возможность весьма привлекательна. 3
  • 4. МАИ, каф 806, Сети ЭВМ Популярность различных подходов к построению API 4
  • 5. МАИ, каф 806, Сети ЭВМ Windows Communication Foundationструктура сервиса 5
  • 6. МАИ, каф 806, Сети ЭВМ Windows Communication Foundationтехнологии/xml XML –это иерархический, текстовый язык разметки, предоставляющий стандартный способ для представления метаданных в понятном для человека и компьютера виде. Для ссылок на другие документы в XMLиспользуются URI Namespace используется для уникальной идентификации частей XML документа 6 <?xml version=‘1.0’ encoding=‘utf-8’?> <!--A collection of Media Items --> <Collection xmlns="http://example.com/schemas/mediacollection"> <Owner>Janine Labrune</Owner> <Name>Janine’s Media Collection</Name> <Item Media_Type="book"> <Title>The Joy of Rutabagas</Title> <Author> <FirstName>Karl</FirstName> <LastName>Jablonski</LastName> </Author> </Item> <Item Media_Type="video"> <Title>Growing Rutabagas as Pets</Title> <Length>35</Length> <Author> <FirstName>Maria</FirstName> <LastName>Anders</LastName> </Author> </Item> </Collection> <p:payload xmlns:p="http://example.com/payload"> <p:owner name="tim" /> <p:text>Payload text</p:text> </p:payload>
  • 7. МАИ, каф 806, Сети ЭВМ Windows Communication Foundationтехнологии/xml schemas Схемы –это XML документы, которые описывают структуру типов данных и их свойства. Обычно используется XSD (schema definition language). 7 <xsd:schema xmlns="http://example.com/schemas/mediacollection" targetNamespace="http://example.com/schemas/mediacollection" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xsd:element name="Collection"> <xsd:complexType> <xsd:sequence> <xsd:element name="Owner" minOccurs="1" type="xsd:string" /> <xsd:element name="Name" minOccurs="1" type="xsd:string" /> <xsd:element name="Item" minOccurs="0" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name="Title" minOccurs="1" type="xsd:string" /> <xsd:element name="Length" minOccurs="0" type="xsd:int" /> <xsd:element name="Author" minOccurs="0" maxOccurs="1"> <xsd:complexType> <xsd:sequence> <xsd:element name="FirstName" minOccurs="0" maxOccurs="1" type="xsd:string" /> <xsd:element name="LastName" minOccurs="0" maxOccurs="1" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> <xsd:attribute name="Media_Type" type="xsd:string" /> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>
  • 8. МАИ, каф 806, Сети ЭВМ 8 Windows Communication Foundationтехнологии/wsdl [1/2] WSDL –язык описания веб-сервиса. WSDL состоит из двух частей:  Абстрактной, описывающей структуру данных и методов веб-сервиса.  Конкретной, описывающей, как данный веб- сервис может быть вызван. Элементы WSDL  Types–описывает типы данных, передаваемые и получаемые веб-сервисом.  Message –описывает сообщения, передаваемые по сети при вызове веб- сервисов.  PortType–абстрактное описание веб- сервиса. Состоит из описания набора операций, которые могут иметь как входные так и выходные сообщения.  Binding–конкретное описание PortType, с указанием протокола, по которому можно вызвать данный сервис.  Service–конкретное описание веб-сервиса, которое указывает по какому адресу может быть вызван тот или иной Binding.
  • 9. МАИ, каф 806, Сети ЭВМ 9 Windows Communication Foundationтехнологии/wsdl [2/2] <?xmlversion="1.0" encoding="utf-8"?> <wsdl:definitionsxmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://tempuri.org/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:types> <s:schemaelementFormDefault="qualified" targetNamespace="http://tempuri.org/"> <s:elementname="HelloWorld">… <s:elementname="HelloWorldResponse"> <s:complexType> <s:sequence> <s:elementminOccurs="0" maxOccurs="1" name="HelloWorldResult" type="s:string" /> </s:sequence> </s:complexType> </s:element> </s:schema> </wsdl:types> <wsdl:messagename="HelloWorldSoapIn">… <wsdl:messagename="HelloWorldSoapOut"> <wsdl:partname="parameters" element="tns:HelloWorldResponse" /> </wsdl:message> <wsdl:portTypename="ServiceSoap"> <wsdl:operationname="HelloWorld"> <wsdl:inputmessage="tns:HelloWorldSoapIn" /> <wsdl:outputmessage="tns:HelloWorldSoapOut" /> </wsdl:operation> </wsdl:portType> <wsdl:bindingname="ServiceSoap" type="tns:ServiceSoap"> <soap:bindingtransport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operationname="HelloWorld"> <soap:operationsoapAction="http://tempuri.org/HelloWorld" style="document" /> <wsdl:input> <soap:bodyuse="literal" /> </wsdl:input> <wsdl:output> <soap:bodyuse="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:bindingname="ServiceSoap12" type="tns:ServiceSoap">… <wsdl:servicename="Service"> <wsdl:portname="ServiceSoap" binding="tns:ServiceSoap"> <soap:addresslocation="http://localhost:1327/Lab1/Service.asmx" /> </wsdl:port> <wsdl:portname="ServiceSoap12" binding="tns:ServiceSoap12">… </wsdl:service> </wsdl:definitions>
  • 10. МАИ, каф 806, Сети ЭВМ Windows Communication Foundationтехнологии/ws-inspection Способ описания сервисов, предоставляемых сайтом. Представляет собой набор указателей на описание сервисов(http://msdn.microsoft.com/en-us/library/ms951237.aspx). 10 <?xml version="1.0"?> <inspection xmlns="http://schemas.xmlsoap.org/ws/2001/10/inspection/" xmlns:wsiluddi="http://schemas.xmlsoap.org/ws/2001/10/inspection/uddi/"> <service> <abstract>A stock quote service with two descriptions</abstract> <description referencedNamespace="http://schemas.xmlsoap.org/wsdl/" location="http://example.com/stockquote.wsdl"/> <description referencedNamespace="urn:uddi-org:api"> <wsiluddi:serviceDescription location="http://www.example.com/uddi/inquiryapi"> <wsiluddi:serviceKey>4FA28580-5C39-11D5-9FCF-BB3200333F79</wsiluddi:serviceKey> </wsiluddi:serviceDescription> </description> </service> <service> <description referencedNamespace="http://schemas.xmlsoap.org/wsdl/" location="ftp://anotherexample.com/tools/calculator.wsdl"/> </service> <link referencedNamespace="http://schemas.xmlsoap.org/ws/2001/10/inspection/" location="http://example.com/moreservices.wsil"/> </inspection>
  • 11. МАИ, каф 806, Сети ЭВМ 11 Windows Communication Foundationтехнологии/soap SimpleObjectAccessProtocol–протокол передачи данных на базе XML. Данные передаются с помощью протокола HTTP. Структура SOAP сообщения соответствует WSDL описанию веб- сервиса. Примерзапроса <?xmlversion="1.0" encoding="utf-8" ?> <soap:Envelopexmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <HelloWorldxmlns="http://tempuri.org/"></HelloWorld> </soap:Body> </soap:Envelope> Примерответа <?xmlversion="1.0" encoding="utf-8" ?> <soap:Envelopexmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <HelloWorldResponsexmlns="http://tempuri.org/"> <HelloWorldResult>Hello World! </HelloWorldResult> </HelloWorldResponse> </soap:Body> </soap:Envelope>
  • 12. МАИ, каф 806, Сети ЭВМ Windows Communication Foundationтехнологии/ws-addressing WS-Addressing заменила собой спецификацию WS-Routing. WS-Addressing включает в себя механизм для идентификации сообщений (MessageID), определения получателя (To) и объекта, которому должен быть послан ответ (ReplyTo). Этот механизм встроен в заголовок SOAP и удлиняет входящие, исходящие сообщения и сообщения об ошибках внутри элемента, определяющего тип порта WSDL с помощью атрибута Action. 12
  • 13. МАИ, каф 806, Сети ЭВМ Windows Communication Foundationтехнологии/ws-addressing 13 <soapenv:Envelope xmlns:soapenv='http://www.w3.org/2003/05/soap-envelope'> <soapenv:Header xmlns:wsa='http://www.w3.org/2005/08/addressing'> <wsa:To>http://localhost:9090/axis2/services/order_service</wsa:To> <wsa:Action>http://wso2.org/wsf/c/addr/order</wsa:Action> <wsa:ReplyTo> <wsa:Address>http://localhost:9090/axis2/services/billing_service</wsa:Address> </wsa:ReplyTo> <wsa:FaultTo> <wsa:Address>http://localhost:9090/axis2/services/reorder_service</wsa:Address> </wsa:FaultTo> <wsa:MessageID>a4dfb94a-593b-1dc1-36d2-000000000000</wsa:MessageID> </soapenv:Header> <soapenv:Body> <ns1:order xmlns:ns1='http://wso2.org/wsf/c/addr/sample'> <item>paper</item> <quantity>100</quantity> </ns1:order> </soapenv:Body> </soapenv:Envelope>
  • 14. МАИ, каф 806, Сети ЭВМ Windows Communication Foundationпаттерны обмена сообщениями/запрос-ответ Самый распространненый паттерн. Клиент запрашивает информацию отправкой запроса на сервер и ожидает ответное сообщений от сервера. Клиент ждет ответа не более чем заранее определенное время (timeout) В случае возникновения исключения посылается сообщение с описанием ошибки. WCF поддерживает описания удаленных интерфейсов, путем применения атрибутов  [ServiceContract] к .NET интерфейсам  [OperationContract] к методам интерфейса 14
  • 15. МАИ, каф 806, Сети ЭВМ Windows Communication Foundationпаттерны обмена сообщениями/one-way Сообщения посылаются от клиента к серверу в одном направлении. Сервер просто обрабатывает сообщения и не отправляет клиенту ответа или уведомления об обработке сообщения. Данный паттерн позволяет работать ассинхронно. С помощью данного паттерна можно применять промежуточное по для отправки сообщений, такое как MSMQ. 15
  • 16. МАИ, каф 806, Сети ЭВМ Windows Communication Foundationпаттерны обмена сообщениями/duplex Данный паттерн позволяет серверу посылать дополнительные запросы в сторону клиента в момент выполнения обработки основного запроса. Фактически клиент так же выступает в роли сервера, для выполнения call-back операций. В .NET есть возможность указать тип Call-Back интерфейса на уровне [Service Contract] В WCF есть специальные типы binding, которые поддерживают call-back соединения. 16
  • 17. МАИ, каф 806, Сети ЭВМ Windows Communication Foundationпаттерны обмена сообщениями/streaming Данный паттерн применяется в случае если необходимо передать большой объем информации от сервера к клиенту (или наоборот). Информация считывается из файла или базы данных по кускам и передается в сеть. Отправитель сам определяет когда закончить передачу данных (какой блок является финальным). 17
  • 18. МАИ, каф 806, Сети ЭВМ Windows Communication Foundationработа с сообщениями Message RoutingНачиная с WCF 4.0 есть поддержка перенаправления сообщений, базируясь на их содержании, с помощью специальных классов, переопределяющих интерфейсы из System.ServiceModel.Routing Protocol BindingВ WCF 4.0 есть средства приведения протокола (чтением данных из протокола источника и записью в протокол получатель). Message FiltersСуществую средства, которые позволяют описывать какое сообщение каким сервисом должно обрабатываться (Xpath, по телу сообщения) Backup Endpoint Multicast BehaviourРеализуется с помощью фильтров. Одно сообщение посылается сразу всем сервисам, с подходдящим фильтром. Discovery (WS-Discovery) Intercepting FiltersПозволяет встраивать логику перед или после обработки основного вызова Context Objects 18
  • 19. МАИ, каф 806, Сети ЭВМ 19 Windows Communication Foundation контракты Контракт –определяет функциональность, предоставляемую службой и функциональность, которая может быть использованна клиентом. Типы контрактов  Контракты данных –определяет данные, принимаемые и возвращаемые службой.  Контракты службы –используется для определения интерфейса службы;  Контракты сообщений –в случае если требуется описывает поведение сообщений, передаваемых при взаимодействии со службой.
  • 20. МАИ, каф 806, Сети ЭВМ 20 Windows Communication Foundation контракты служб[1/2] Определяет операции, которые может выполнить служба. 1.[ServiceContract()] 2.public interface IMyService 3.{ 4.[OperationContract] 5.OutputObject doAction(InputObject parameter); 6.} Свойства ServiceContract  ConfigurationName –имя конфигурации службы в конфигурационном файле  CallbackContract–используется для дуплексного обмена (см. далее)  Name–определяет имя элемента portType  Namespace –определяет пространство имен для portType  SessionMode –управление сессиями  ProtectionLevel–управление защитой коммуникаций
  • 21. МАИ, каф 806, Сети ЭВМ 21 Windows Communication Foundation контрактыслужб [2/2] Свойства OperationContract  Action –Используется для установки соответствия имен операций и SOAPсообщений  ReplyAction–то же самое что и Action но для сообщений-ответов  AsyncPattern–используется для асинхронного обмена (BeginAsync, EndAsync)  IsInitiating–Операция инициирующая сеанс  IsTerminating–Операция завершающая сеанс  IsOneWay–Клиент не должден ждать результата от сервиса  Name–Имя операции (по умолчанию равно имени метода)  ProtectionLevel-управление защитой коммуникаций
  • 22. МАИ, каф 806, Сети ЭВМ 22 Windows Communication Foundation контракты данных Пример 1.[DataContract] 2.public class OutputObject 3.{ 4.string message; 5.[DataMember] 6.public string Message 7.{ 8.get { return message; } 9.set { message = value; } 10.} 11.} Свойства DataMember  Name –служит для изменения имени атрибута  Order–определяет порядок сериализации атрибутов  IsRequired–элемент обязателен для сериализации (по умолчанию не обязательны)  EmitDefaultValue-необходимость передачи значения по умолчанию для поля
  • 23. МАИ, каф 806, Сети ЭВМ Windows Communication Foundation контракты данных/пример [DataContract( Name="PriceCalculationRequest", Namespace= "http://schemas.datacontract.org/2004/07/ MyScheme")] public class PriceReq { [DataMember(Name="PickupDate",Order=1, IsRequired=true )] private DateTimeFromDate{ get; set; } [DataMember(Name= "ReturnDate", Order = 3)] public DateTimeToDate{ get; set; } [DataMember( Order = 2)] public string PickupLocation{ get; set; } [DataMember(Order= 4)] public string ReturnLocation{ get; set; } public string CarType{ get; set; } } <xs:complexTypename="PriceCalculationRequest" > <xs:sequence> <xs:elementminOccurs="0" name="PickupDate" type="xs:dateTime" / > <xs:elementminOccurs="0" name="PickupLocation" nillable="true" type="xs:string" / > <xs:elementminOccurs="0" name="ReturnDate" type="xs:dateTime" / > <xs:elementminOccurs="0" name="ReturnLocation" nillable="true" type="xs:string" / > </xs:sequence> </xs:complexType> 23
  • 24. МАИ, каф 806, Сети ЭВМ Windows Communication Foundation контракты данных/наследование Описание на уровне контракта данных, то какие объекты могут передаваться: [DataContract] [KnownType(typeof(PriceCalculationResponseDetailed))] public class PriceCalculationResponse{ [DataMember] public double Price { get; set; }} Описание на уровне метода [OperationContract] [ServiceKnownType(typeof(PriceCalculationResponseDetailed))] PriceCalculationResponse CalculatePrice(PriceCalculationRequest request); Описание на уровне сервиса [OperationContract] [ServiceKnownType(typeof(PriceCalculationResponseDetailed))] PriceCalculationResponse CalculatePrice(PriceCalculationRequest request); Динамическое описание [DataContract] [KnownType("GetTypes")] public class PriceCalculationResponse{ static Type[] GetTypes(){Type[] t = { typeof(PriceCalculationResponseDetailed) };return t; } } 24
  • 25. МАИ, каф 806, Сети ЭВМ Windows Communication Foundation контракты данных/версии При модификации программы контракты данных могут менять свою структуру. Для того что бы корректно отрабатывать данную ситуацию необходимо на уровне базового объекта определить возможность расширения: [DataContract] public class PriceCalculationResponse :IExtensibleDataObject { public ExtensionDataObjectExtensionData { get; set; } [DataMember] public int Flag { get; set; } [DataMember] public double Price { get; set; } [DataMember] public string Currency { get; set; } } 25
  • 26. МАИ, каф 806, Сети ЭВМ 26 Windows Communication Foundation контракты сообщений Используется для контроля над SOAP сообщениями. Пример 1.[MessageContract] 2.public class MyRequestMessage 3.{ 4.[MessageHeader] 5.public int count; 6.[MessageBodyMember(Order = 0)] 7.public String person; 8.} 9.[ServiceContract] 10.public interface IMyRequestHandler 11.{ 12.[OperationContract] 13.bool ProcessRequest(MyRequestMessage msg); 14.}
  • 27. МАИ, каф 806, Сети ЭВМ 27 Windows Communication Foundation пример/cборка с описанием данных и сервиса[1/2] 1.using System; 2.using System.Collections.Generic; 3.using System.ServiceModel; 4.using System.Runtime.Serialization; 5.namespace WCFServiceExample 6.{ 7.[DataContract] 8.public class InputObject 9.{ 10.string firstName; 11.string lastName; 12.[DataMember] 13.public string FirstName 14.{ 15.get { return firstName; } 16.set { firstName = value; } 17.} 18.[DataMember] 19.public string LastName 20.{ 21.get { return lastName; } 22.set { lastName = value; } 23.} 24.} 25.[DataContract] 26.public class OutputObject 27.{ 28.string message; 29.[DataMember] 30.public string Message 31.{ 32.get { return message; } 33.set { message = value; } 34.} 35.} 36.}
  • 28. МАИ, каф 806, Сети ЭВМ 28 Windows Communication Foundation пример/cборка с описанием данных и сервиса[2/2] 1.using System; 2.using System.Collections.Generic; 3.using System.Text; 4.using System.ServiceModel; 5.using System.Runtime.Serialization; 6.namespace WCFServiceExample 7.{ 8.[ServiceContract()] 9.public interface IMyService 10.{ 11.[OperationContract] 12.OutputObject doAction(InputObject parameter); 13.} 14.public class MyServiceImpl : IMyService 15.{ 16.#region IMyService Members 17.public OutputObject doAction(InputObject parameter) 18.{ 19.OutputObject obj = new OutputObject(); 20.obj.Message = String.Format("Hello {0} {1}!", parameter.FirstName, parameter.LastName); 21.return obj; 22.} 23.#endregion 24.} 25.}
  • 29. МАИ, каф 806, Сети ЭВМ 29 Windows Communication Foundation пример/хост 1.using System; 2.using System.Collections.Generic; 3.using System.Text; 4.using WCFServiceExample; 5.using System.ServiceModel; 6.using System.ServiceModel.Channels; 7.using System.Net; 8.namespace WCFServiceHost 9.{ 10.class Program 11.{ 12.static void Main(string[] args) { 13.ServiceHosthost = ConfigureFromFile(); 14.host.Open(); 15.Console.WriteLine("Service started"); Console.ReadLine(); 16.host.Close(); 17.} 18.static ServiceHost ConfigureInline() { 19.Uri base_address = new Uri("http://localhost:8080/MyService"); 20.ServiceHost host = new ServiceHost(typeof(MyServiceImpl), base_address); 21.host.AddServiceEndpoint(typeof(IMyService), new WSHttpBinding(), ""); 22.return host; 23.} 24.static ServiceHost ConfigureFromFile() { 25.ServiceHost host = new ServiceHost(typeof(MyServiceImpl)); 26.return host; 27.} 28.} 29.}
  • 30. МАИ, каф 806, Сети ЭВМ 30 Windows Communication Foundation пример/конфигурация (App.Config) 1.<?xml version="1.0" encoding="utf-8" ?> 2.<configuration> 3.<system.serviceModel> 4.<services> 5.<service name ="WCFServiceExample.MyServiceImpl" behaviorConfiguration="MyServiceBehavior"> 6.<endpoint contract="WCFServiceExample.IMyService" binding="wsHttpBinding"/> 7.<endpoint contract="IMetadataExchange" binding="wsHttpBinding" address="mex"/> 8.<host> 9.<baseAddresses> 10.<add baseAddress="http://localhost:8080/MyService"/> 11.</baseAddresses> 12.</host> 13.</service> 14.</services> 15.<behaviors> 16.<serviceBehaviors> 17.<behavior name="MyServiceBehavior" > 18.<serviceMetadata httpGetEnabled="true" /> 19.</behavior> 20.</serviceBehaviors> 21.</behaviors> 22.</system.serviceModel> 23.</configuration>
  • 31. МАИ, каф 806, Сети ЭВМ 31 Windows Communication Foundation пример/клиент Создаем проект Создаем ссылку на службу (Add Web-reference). При этом добавляются сборки System.Runtime.Serializationи System.ServiceModel Пишем код 1.using System; 2.using System.Collections.Generic; 3.using System.Text; 4.using WCFServiceExample; 5.namespace WCFClient 6.{ 7.class Program 8.{ 9.static void Main(string[] args) 10.{ 11.Console.WriteLine("Connecting to server .."); 12.InputObject inp = new InputObject(); 13.inp.LastName = "Ivanov"; 14.inp.FirstName = "Ivan"; 15.MyServiceClient srv = new MyServiceClient(); 16.OutputObject otp = srv.doAction(inp); 17.Console.WriteLine(otp.Message); 18.Console.ReadLine(); 19.} 20.} 21.}
  • 32. МАИ, каф 806, Сети ЭВМ 32 Windows Communication Foundation пример/клиентская конфигурация 1.<?xml version="1.0" encoding="utf-8" ?> 2.<configuration> 3.<system.serviceModel> 4.<bindings> 5.<wsHttpBinding> 6.<binding name="WSHttpBinding_IMyService" closeTimeout="00:01:00" 7.openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 8.bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" 9.maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 10.messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" 11.allowCookies="false"> 12.</binding> 13.</wsHttpBinding> 14.</bindings> 15.<client> 16.<endpoint address="http://localhost:8080/MyService" binding="wsHttpBinding" 17.bindingConfiguration="WSHttpBinding_IMyService" contract="IMyService" 18.name="WSHttpBinding_IMyService"> 19.</endpoint> 20.</client> 21.</system.serviceModel> 22.</configuration>
  • 33. МАИ, каф 806, Сети ЭВМ 33 Windows Communication Foundationbinding Binding определяет как служба будет взаимодействовать с клиентами. А именно:  Адрес;  Транспортный протокол;  Требования к безопасности;  Формат кодирования;  Требования транзакций; Определяются на уровне создания хоста сервиса;
  • 34. МАИ, каф 806, Сети ЭВМ 34 Windows Communication Foundation ServiceBehavior ServiceBehavior определяется на уровне класса, реализующего ServiceContract (наследующего интерфейс). Описывает доп. функциональность, для службы. Пример 1.[ServiceBehavior] 2.public class MyServiceImpl : IMyService 3.{ 4.public OutputObject doAction(InputObject parameter) 5.{return new OutputObject();} 6.} Значения  TransactionAutoCompleteOnSessionClose –аналог [AutoComplete]  TransactionIsolationLevel –уровень изоляции транзакций  ReleaseServiceInstanceOnTransactionComplete–Позволяет повторное использование экземпляра объекта  AutomaticSessionShutdown–Разрывает сеанс при окончании вызова  InstanceContextMode–Аналог SingleCall/Singleton в Remoting  ConcurrencyMode –Управление множественным доступом к службе из разных клиентов(single/multi)  UseSynchronizationContext–Для внутренних служб WinForms, что бы создавать службу в потоке, в котором она инициируется  IncludeExceptionDetailInDaults–Включать в Exception развернутое описание ошибки  MaxItemsInObjectGraph–ограничение числа передаваемых объектов  AddressFilterMode: Управление фильром сообщений: Any , Exact , and Prefix ..  IgnoreExtensionDataObject: Если установленно в true то расширения не передаются..
  • 35. МАИ, каф 806, Сети ЭВМ Windows Communication Foundation metadata publishing ServiceHosthost = new ServiceHost(typeof(MyService)); ServiceMetadataBehaviorserviceMetadata= host.Description.Behaviors.Find< ServiceMetadataBehavior> (); if (serviceMetadata== null) { serviceMetadata= new ServiceMetadataBehavior(); host.Description.Behaviors.Add(serviceMetadata); } serviceMetadata.HttpGetEnabled= true; BasicHttpBindingbinding = new BasicHttpBinding(); host.AddServiceEndpoint(typeof(IMyService), Binding,"http://localhost:8080/MyService"); 35
  • 36. МАИ, каф 806, Сети ЭВМ 36 Windows Communication Foundation OperationBehavior Применяется к методам класса, реализующего интерфейс с ServiceContract Значения  AutoDisposeParameters –если стоит true –то за очистку параметров отвечает сервер, иначе –клиент.  Impersonation–позволяет идентифицировать вызывающего;  ReleaseInstanceMode–определяет режим освобождения экземпляра (на уровне операции);  TransactionScopeRequired–требуется ли транзакция или нет;  TransactionAutoComplete–должна ли транзакция завершаться автоматически или нет;
  • 37. МАИ, каф 806, Сети ЭВМ Windows Communication Foundation OperationBehavior/пример using System; using Wrox.CarRentalService.Contracts; namespace Wrox.CarRentalService.Implementations.Europe { public class CarRentalService: ICarRentalService { [OperationBehavior( AutoDisposeParameters= true, Impersonation = ImpersonationOption.NotAllowed, ReleaseInstanceMode= ReleaseInstanceMode.None, TransactionAutoComplete= true, TransactionScopeRequired= false)] double CalculatePrice(DateTimepickupDate, DateTimereturnDate,stringpickupLocation, string vehiclePreference) { // method code here } } } 37
  • 38. МАИ, каф 806, Сети ЭВМ Windows Communication Foundation endpoint behaviour/пример CarRentalServiceClientclient = new CarRentalServiceClient(); try { client.ClientCredentials.ClientCertificate.SetCertificate( StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectDistinguishedName, "CN=client_cert"); // other code client.Close(); } catch (Exception ex) { client.Abort(); throw; } ServiceHosthost = new ServiceHost(typeof(CarRentalService)); try { BasicHttpBindingbinding = new BasicHttpBinding(); ServiceEndpointserviceEndpoint= host.AddServiceEndpoint(typeof(ICarRentalService), binding, "http://localhost:8080/CarRentalService"); ServiceCredentialscredentials = new ServiceCredentials(); credentials.ServiceCertificate.SetCertificate( StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectDistinguishedName, "CN=service_cert"); host.Open(); // other code here ... host.Close(); 38
  • 39. МАИ, каф 806, Сети ЭВМ Windows Communication Foundationстандартные binding 39
  • 40. МАИ, каф 806, Сети ЭВМ Windows Communication Foundation клиенты 40
  • 41. МАИ, каф 806, Сети ЭВМ 41 Windows Communication Foundation клиенты Клиентскому приложению для получения доступа к службе нужен прокси. Его можно создать:  Visual Studio –Add Service Reference  Инструмент svcutil.exe  Класс ChannelFactory<TChannel> Пример 1.static OutputObject UseChannelFactory(InputObject inp) 2.{ 3.WSHttpBinding binding = new WSHttpBinding(); 4.EndpointAddress address = new EndpointAddress("http://localhost:8080/MyService"); 5.ChannelFactory<IMyService> factory = new ChannelFactory<IMyService>(binding, address); 6.try 7.{ 8.IMyService service = factory.CreateChannel(); 9.return service.doAction(inp); 10.} 11.finally 12.{ 13.factory.Close(); 14.} 15.}
  • 42. МАИ, каф 806, Сети ЭВМ 42 Windows Communication Foundation дуплексная коммуникация При дуплексной коммуникации служба может вызывать клиента; Канал должен быть дуплексным; На стороне клиента описывается контракт, который прописывается на сервере в свойстве CallbackContract; 1.[ServiceContract(CallbackContract=typeof(ICalculatorDuplexCallback))] 2.public interface ICalculatorDuplex{ 3.[OperationContract(IsOneWay = true)] 4.void AddTo(double n); 5.} Клиент 1.public interface ICalculatorDuplexCallback{ 2.[OperationContract(IsOneWay = true)] 3.void Equals(double result); 4.} Вызов клиента на сервере callback = OperationContext.Current.GetCallbackChannel<ICalculatorDuplexCallback>();
  • 43. МАИ, каф 806, Сети ЭВМ 43 Windows Communication Foundation использование HTTPS и NTLM авторизации 1.<?xml version="1.0" encoding="utf-8" ?> 2.<configuration> 3.<system.serviceModel> 4.<bindings> 5.<basicHttpBinding> 6.<binding name="ClientServiceSoap" closeTimeout="00:01:00" openTimeout="00:01:00" 7.receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" 8.bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 9.maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 10.messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 11.useDefaultWebProxy="true"> 12.<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 13.maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 14.<security mode="Transport"> 15.<transport clientCredentialType="Ntlm" realm="tfs.sitels.ru" /> 16.<message clientCredentialType="UserName" algorithmSuite="Default" /> 17.</security> 18.</binding> 19.</basicHttpBinding> 20.</bindings> 21.<client> 22.<endpoint address="https://tfs.sitels.ru:8081/WorkItemTracking/v1.0/ClientService.asmx" 23.binding="basicHttpBinding" 24.bindingConfiguration="ClientServiceSoap" 25.contract="TFSService.ClientServiceSoap" name="ClientServiceSoap" /> 26.</client> 27.</system.serviceModel> 28.</configuration>
  • 44. МАИ, каф 806, Сети ЭВМ 44 Windows Communication Foundation потоковые данные Устанавливаем transferMode="Streamed" в Binding (клиента и сервера). Устанавливаем <httpRuntime maxRequestLength="65536"/> (сервер) Описываем MessageContract (должен быть тип данных с потоком [MessageContract] public class FileUploadMessage{ [MessageHeader(MustUnderstand = true)] public DataContracts.DnvsDnvxSession DnvxSession[MessageHeader(MustUnderstand = true)] public DataContracts.EApprovalContext Context[MessageHeader(MustUnderstand = true)] public DataContracts.FileMetaData FileMetaData[MessageBodyMember(Order = 1)] public System.IO.Stream FileByteStream} Описываем серверный контракт [OperationContract(Action = "UploadFile", IsOneWay = true)] void UploadFile(ServiceContracts.FileUploadMessage request); Реализуем сервер public void UploadFile(FileUploadMessage request) { Stream sourceStream = request.FileByteStream; …
  • 45. МАИ, каф 806, Сети ЭВМ Windows Communication Foundationinstancecontectmode/PerCall // Per Call [ServiceBehavior( InstanceContextMode = InstanceContextMode.PerCall)] public class CarRentalService: ICarRentalService { … //Singleton [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode. Multiple )] public class CarRentalService: ICarRentalService { … // Per session [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] public class CarRentalService: ICarRentalService { … PerCall  При каждом новом вызове сервера создается новый экземпляр объекта на сервере.  Очень удобно для масштабирования.  Накладные расходы на создание объекта. Singleton  Используется один экземплярвсегда.  Необходимо установить ConcurrencyMode.Multiple PerSession  Каждый клиент взаимодействует всегда с одним и тем же сервером.  Взаимодействие обрывается по таймауту или по прерывании сессии клиентом (вызов метода Close). 45
  • 46. МАИ, каф 806, Сети ЭВМ Windows Communication FoundationserviceThrottling Behavior < serviceBehaviors > < behavior name="throttlingBehavior" > < serviceThrottling maxConcurrentCalls ="5" maxConcurrentSessions="2" maxConcurrentInstances="3" / > < /behavior > < /serviceBehaviors > Включение счетчиков производительности < system.serviceModel > < diagnostics performanceCounters="All"/ > < /system.serviceModel > Позволяет управлять нагрузкой на сервер Ограничивает максимальное число параллельно выполняемых процессов Максимальное число параллельно поддерживаемых сессий Максимальное число одновременно загруженных в память объектов сервера 46
  • 47. МАИ, каф 806, Сети ЭВМ Windows Communication FoundationConcurrencyMode Устанавливается ServiceBehavior По умолчанию, ConcurrencyMode.Single  У одному объекту может обращаться только один поток (клиент)  Нет проблем с разделяемым доступом к ресурсам ConcurrencyMode.Multiple  Любое количество потоков может обращаться к объекту  Необходимо решать проблемы с разделяемым доступом Имеет значение если вы разрабатываете многопоточный клиент с методом доступа PerSession или Singleton. В случае PerCall –на каждый запрос и так создается новый серверный объект. 47
  • 48. МАИ, каф 806, Сети ЭВМ 48 Windows Communication Foundation итого Комбинирует функциональность Web-Service, .NET Remoting, MSMQ и Enterprise Services; Включает средства для обеспечения:  Настраиваемый хостинг компонентов и служб;  Декларативное поведение;  Различные коммуникационные каналы (HTTP, TXP, ...);  Инфраструктура безопасности;  Расширяемость (сбоственные каналы, форматировщики и прокси);  Поддержка предшествующих технологий (например можно сделать WCF сервис, взаимодействующий с Web Service)
  • 49. МАИ, каф 806, Сети ЭВМ RESTSystem.ServiceModel.Web Используется расширение WebGetи WebInvokeдлOperationContractи webHttpBinding [ServiceContract()] publicinterfaceICarRentalService { [OperationContract] [WebGet(UriTemplate= "/CarPool")] CarPoolGetAllCars(); [OperationContract] [WebGet(UriTemplate= "/CarPool/{carName}?format=xml",ResponseFormat= WebMessageFormat.Xml)] Car GetCarXML(string carName); [OperationContract] [WebGet(UriTemplate= "/CarPool/{carName}?format=json",ResponseFormat= WebMessageFormat.Json)] Car GetCarJSON(string carName); [OperationContract] [WebInvoke(UriTemplate= "CarPool/{carName}", Method = "PUT")] Car AddCar(string carName, Car car); [OperationContract] [WebInvoke(UriTemplate= "/CarPool/{carName}", Method = "DELETE")] void DeleteCar(string carName); } 49
  • 50. МАИ, каф 806, Сети ЭВМ Что почитать? PROFESSIONAL WCF 4 WINDOWS COMMUNICATION FOUNDATION WITH .NET 4 Pablo Cibraro Kurt Claeys Fabio Cozzolino Johann Grabner 50
  • 51. МАИ, каф 806, Сети ЭВМ AXIS2 Web-services & java 51
  • 52. МАИ, каф 806, Сети ЭВМ AXIS2 Класс ServiceClient –простой прием и отправка XML сообщений ServiceClientимеет следующий набор API  sendRobust –просто отправка XML без ожидания ответа, но с получением Exception в случае ошибуи.  FireAndForget–просто отправка XML без ожидания ответа или исключения  SendRecieve–отправка запроса и получение ответа  SendReceiveNonBlocking–То же что и SendReceive но с получением ответа через CallBack объект. Трансортный уровень  HTTP/HTTPS  TCP (только совместно с WS-Addressing)  SMTP (требует e-mail аккаунт)  JMS (будет рассматриватся в лекции про очереди сообщений)  XMPP (jabber сервера http://xmpp.org/) Кодогенерация –для упрощения вызова удаленных сервисов и публикации своих. 52
  • 53. МАИ, каф 806, Сети ЭВМ 53 Web.Service. Java. AXIS Используется библиотека Apache Axis2 Доступна для скачивания http://ws.apache.org/axis/ Включает в себя  Сервер, для запуска Веб-сервисов  Сервер, для встраивания в Tomcat  Поддержка WSDL  Средства генерации Java-классов по WSDL Для написания сервера необходимо:  Написания Java-класса «сервера»  Запуска сервера либо в составе J2EE сервера, либо Online  Для запуска Online необходимо воспользоваться классомorg.apache.axis2.engine.AxisServer  Сервис будет доступен по адресу http://localhost:6060/axis/services/ИмяКласса  Где ИмяКласса –имя вашего класса, который вы опубликовали в виде сервиса.
  • 54. МАИ, каф 806, Сети ЭВМ 54 Web.Service. Java. AXIS. Сервер 1.publicclassMyService { 2.// всеpublic методы станут доступны как методы веб-сервиса (очень удобно) 3.publicint[] doHelloWorld(int[]src) 4.{ 5.int[] result = newint[src.length]; 6.for(inti=0;i<src.length;i++) result[i]=src[src.length-i-1]; 7.returnresult; 8.} 9.// вообще говоря, исключения надо обрабатывать корректно 10.publicstaticvoidmain(String[] args) throwsException 11.{ 12.// запускаем сервис 13.neworg.apache.axis2.engine.AxisServer().deployService( 14.MyService.class.getName()); 15.} 16.}
  • 55. МАИ, каф 806, Сети ЭВМ AXIS2 Client Клиент делается ещё проще:просто запускаем кодогенерациюпо URI wsdlили wsdl-файлу. java -classpathaxis2-codegen-1.6.1.jar;axis2-kernel-1.6.1.jar;wsdl4j-1.6.2.jar;commons-logging- 1.1.1.jar;neethi-3.0.1.jar;axiom-api-1.2.12.jar;axiom-dom-1.2.12.jar;axiom-impl- 1.2.12.jar;XmlSchema-1.4.7.jar;axis2-adb-codegen-1.6.1.jar;axis2-adb-1.6.1.jar org.apache.axis2.wsdl.WSDL2Java -urihttp://localhost:6060/axis2/services/MyServer?wsdl Получается набор файлов:  MyServiceStub.java–заглушка сервиса  MyServiceStubExceptionException0.java–исключение, генерируемоесервисом  MyServiceStubCallbackHandler.java–callback объект для неблокируемых вызовов 55
  • 56. МАИ, каф 806, Сети ЭВМ 56 Web.Service. Java. AXIS. Клиент 1.import org.apache.ws.axis2.MyServiceStub; 2.public class MyClient 3.{ 4.public static void main(String[] argv) throws Exception 5.{ 6.MyServiceStub stub = new MyServiceStub(); 7.MyServiceStub.DoHelloWorld request = new MyServiceStub.DoHelloWorld(); 8.request.setSrc(new int[] {1,2,3,4,5}); 9.MyServiceStub.DoHelloWorldResponse result = stub.doHelloWorld(request); 10.if(result!=null) 11.{ 12.if(result.get_return()!=null) 13.for(int i=0;i<result.get_return().length;i++) 14.System.out.println("["+result.get_return()[i]+"]"); 15.} 16.} 17.}