Создание веб-сервисов на платформе .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 = "http://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="http://tempuri.org/">Hello World</string>
Как можно заметить, эта операция веб-сервиса не принимает никаких параметров. Для того чтобы изменить это, достаточно поменять определение метода в файле описания класса сервиса. Например, можно модифицировать веб-сервис таким образом, чтобы он выдавал приветствие в зависимости от имени его запросившего. Сокращенный и переделанный код будет выглядеть так:
using System.Web.Services;
[WebService(Namespace = "http://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="http://tempuri.org/">Привет, Makc!</string>
Предоставляемый тестовый интерфейс также позволяет получить доступ к WSDL-файлу веб-сервиса и посмотреть для каждой операции шаблоны SOAP сообщений, которые она принимает и передает. Соответствующий этому веб-сервису WSDL-файл приведен ниже:
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions
xmlns: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:schema elementFormDefault="qualified"
targetNamespace="http://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="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="Hello">
<soap:operation soapAction="http://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="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="Hello">
<soap12:operation soapAction="http://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="http://localhost:1481/WS/Service.asmx"/>
</wsdl:port>
<wsdl:port name="ServiceSoap12"
binding="tns:ServiceSoap12">
<soap12:address location="http://localhost:1481/WS/Service.asmx"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Дата добавления: 2015-02-28; просмотров: 1774;