Создание веб-сервисов на платформе. NET

Создание веб-сервисов на платформе.NET – довольно простой процесс. Для этого не требуется знания о протоколах HTTP и SOAP или языке описания веб-сервисов WSDL. Среда разработки, используя библиотеку по работе с веб-сервисами самостоятельно создает прокси-классы веб-сервисов, скрывая, таким образом процесс взаимодействия с ними от разработчика.

Рассмотрим пример создания простой службы на платформе.NET 2.0, используя среду разработки Visual Studio 2005. В качестве языка реализации будем использовать C#.

Для этого в среде разработки необходимо создать новый проект типа «Web Site», выбрав шаблон «ASP.NET Web Service». Созданный проект содержит два файла – «Service.asmx» и «Service.cs». Первый из них является страницей ASP.NET, которая расположена в корне веб-сайта и предназначена для вызова класса веб-сервиса:

<%@ WebService Language="C#" CodeBehind="~/App_Code/Service.cs" Class="Service" %>

Второй файл содержит описание самого класса веб-сервиса. Как можно заметить в нем уже написан веб-сервис типа «Hello, World»:

using System;

using System.Web;

using System.Web.Services;

using System.Web.Services.Protocols;

[WebService(Namespace = "https://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

public class Service: System.Web.Services.WebService

{

public Service () {

//Uncomment the following line if using designed components

//InitializeComponent();

}

[WebMethod]

public string HelloWorld()

{

return "Hello World";

}

}

Созданный веб-сервис готов к работе и при вызове метода «HelloWorld» выдает следующее сообщение:

<?xml version="1.0" encoding="utf-8"?>

<string xmlns="https://tempuri.org/">Hello World</string>

Как можно заметить, эта операция веб-сервиса не принимает никаких параметров. Для того чтобы изменить это, достаточно поменять определение метода в файле описания класса сервиса. Например, можно модифицировать веб-сервис таким образом, чтобы он выдавал приветствие в зависимости от имени его запросившего. Сокращенный и переделанный код будет выглядеть так:

using System.Web.Services;

[WebService(Namespace = "https://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

public class Service: WebService

{

[WebMethod]

public string Hello(string name)

{

return "Привет, " + name + "!";

}

}

Этот вариант веб-сервиса при вызове операции «Hello» требует предоставления параметра «name», что может быть наглядно продемонстрировано при помощи тестового веб-интерфейса, предоставляемого веб-сервисами.NET. Этот интерфейс позволяет вызывать созданный веб-сервис, используя его привязку к HTTP POST\GET:

Рис. 4.1. Тестовый интерфейс для вызова операции "Hello".

В ответ на этот вызов, веб-сервис отправит следующее сообщение:

<?xml version="1.0" encoding="utf-8"?>

<string xmlns="https://tempuri.org/">Привет, Makc!</string>

Предоставляемый тестовый интерфейс также позволяет получить доступ к WSDL-файлу веб-сервиса и посмотреть для каждой операции шаблоны SOAP сообщений, которые она принимает и передает. Соответствующий этому веб-сервису WSDL-файл приведен ниже:

<?xml version="1.0" encoding="utf-8"?>

<wsdl:definitions

xmlns:soap="https://schemas.xmlsoap.org/wsdl/soap/"

xmlns:tm="https://microsoft.com/wsdl/mime/textMatching/"

xmlns:soapenc="https://schemas.xmlsoap.org/soap/encoding/"

xmlns:mime="https://schemas.xmlsoap.org/wsdl/mime/"

xmlns:tns="https://tempuri.org/"

xmlns:s="https://www.w3.org/2001/XMLSchema"

xmlns:soap12="https://schemas.xmlsoap.org/wsdl/soap12/"

xmlns:http="https://schemas.xmlsoap.org/wsdl/http/"

targetNamespace="https://tempuri.org/"

xmlns:wsdl="https://schemas.xmlsoap.org/wsdl/">

<wsdl:types>

<s:schema elementFormDefault="qualified"

targetNamespace="https://tempuri.org/">

<s:element name="Hello">

<s:complexType>

<s:sequence>

<s:element minOccurs="0"

maxOccurs="1"

name="name"

type="s:string" />

</s:sequence>

</s:complexType>

</s:element>

<s:element name="HelloResponse">

<s:complexType>

<s:sequence>

<s:element minOccurs="0"

maxOccurs="1"

name="HelloResult"

type="s:string" />

</s:sequence>

</s:complexType>

</s:element>

</s:schema>

</wsdl:types>

<wsdl:message name="HelloSoapIn">

<wsdl:part name="parameters"

element="tns:Hello" />

</wsdl:message>

<wsdl:message name="HelloSoapOut">

<wsdl:part name="parameters"

element="tns:HelloResponse" />

</wsdl:message>

<wsdl:portType name="ServiceSoap">

<wsdl:operation name="Hello">

<wsdl:input message="tns:HelloSoapIn" />

<wsdl:output message="tns:HelloSoapOut" />

</wsdl:operation>

</wsdl:portType>

<wsdl:binding name="ServiceSoap"

type="tns:ServiceSoap">

<soap:binding transport="https://schemas.xmlsoap.org/soap/http" />

<wsdl:operation name="Hello">

<soap:operation soapAction="https://tempuri.org/Hello"

style="document" />

<wsdl:input>

<soap:body use="literal" />

</wsdl:input>

<wsdl:output>

<soap:body use="literal" />

</wsdl:output>

</wsdl:operation>

</wsdl:binding>

<wsdl:binding name="ServiceSoap12"

type="tns:ServiceSoap">

<soap12:binding transport="https://schemas.xmlsoap.org/soap/http" />

<wsdl:operation name="Hello">

<soap12:operation soapAction="https://tempuri.org/Hello"

style="document" />

<wsdl:input>

<soap12:body use="literal" />

</wsdl:input>

<wsdl:output>

<soap12:body use="literal" />

</wsdl:output>

</wsdl:operation>

</wsdl:binding>

<wsdl:service name="Service">

<wsdl:port name="ServiceSoap"

binding="tns:ServiceSoap">

<soap:address location="https://localhost:1481/WS/Service.asmx"/>

</wsdl:port>

<wsdl:port name="ServiceSoap12"

binding="tns:ServiceSoap12">

<soap12:address location="https://localhost:1481/WS/Service.asmx"/>

</wsdl:port>

</wsdl:service>

</wsdl:definitions>


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: