Спонсор: Microsoft
Воронежский государственный университет
Опубликован: 04.02.2009 | Доступ: свободный | Студентов: 8253 / 690 | Оценка: 4.14 / 3.78 | Длительность: 19:54:00
Самостоятельная работа 14:

Разработка веб-службы в ASPNET

< Лекция 12 || Самостоятельная работа 14 || Самостоятельная работа 15 >
Аннотация: Цель работы: знакомство с инструментом разработки ASP.NET веб-служб в среде Microsoft Visual Studio.
Ключевые слова: ASP, net

Рассмотрим в качестве примера создание с помощью ASP.NET веб-службы, которая переводит любое целое десятичное число в один из форматов по выбору: двоичный, восьмеричный, десятичный.

  1. Создайте новый проект (тип: ASP Web Service), например, под именем ASPNETCalcWebService. В результате будет автоматически сгенерирован файл Service1.asmx.cs.

    Программная логика веб-службы будет реализована на языке C# в CodeBehind файле Service1.asmx.cs:

    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Web;
    using System.Web.Services;
    using System.Web.Services.Protocols;
    
    namespace ASPNETCalcWebService
    {
        /// <summary>
        /// Summary description for Service1
        /// </summary>
        [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        [ToolboxItem(false)]
        public class Service1 : System.Web.Services.WebService
        {
            [WebMethod]
            public string HelloWorld()
            {
                return "Hello World";
            }
        }
    }
  2. Для реализации логики веб-службы в этом файле замените в файле Service1.asmx.cs метод HelloWorld() на 3 новых метода, при помощи которых будут выполняться все преобразования:
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Web;
    using System.Web.Services;
    using System.Web.Services.Protocols;
    
    namespace ASPNETCalcWebService
    {
        /// <summary>
        /// Summary description for Service1
        /// </summary>
        [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        [ToolboxItem(false)]
        public class Service1 : System.Web.Services.WebService
        {
            //Uncomment the following line if using designed components 
            //InitializeComponent(); 
        }
    
    // Преобразование в двоичную систему счисления
    
        [WebMethod]
        public string Binary(int x) {
            return Convert.ToString(x, 2);
        }
    
    // Преобразование в восьмеричную систему счисления
    
        [WebMethod]
        public string Octal(int x)
        {
            return Convert.ToString(x, 8);
        }
    
    // Преобразование в шестнадцатиричную систему счисления
    
        [WebMethod]
        public string Hexadecimal(int x)
        {
            return Convert.ToString(x, 16);
        }
    }
    26.1.

    Атрибут WebMethod в этом файле указывает на то, что описываемый метод должен быть доступен по протоколу HTTP для пользователей.

  3. Откомпилируйте и запустите проекта. В результате в браузере должна следующая страница

  4. Активируйте гиперссылку "Описание службы". В окне браузера должно появиться описание веб-службы в формате 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="Binary">
    <s:complexType>
     <s:sequence>
      <s:element minOccurs="1" maxOccurs="1" name="x" type="s:int" /> 
      </s:sequence>
      </s:complexType>
      </s:element>
    <s:element name="BinaryResponse">
     <s:complexType>
    <s:sequence>
      <s:element minOccurs="0" maxOccurs="1" name="BinaryResult" type="s:string" /> 
      </s:sequence>
      </s:complexType>
      </s:element>
     <s:element name="Octal">
     <s:complexType>
    <s:sequence>
      <s:element minOccurs="1" maxOccurs="1" name="x" type="s:int" /> 
      </s:sequence>
      </s:complexType>
      </s:element>
     <s:element name="OctalResponse">
    <s:complexType>
    <s:sequence>
      <s:element minOccurs="0" maxOccurs="1" name="OctalResult" type="s:string" /> 
      </s:sequence>
      </s:complexType>
      </s:element>
     <s:element name="Hexadecimal">
    <s:complexType>
    <s:sequence>
      <s:element minOccurs="1" maxOccurs="1" name="x" type="s:int" /> 
      </s:sequence>
      </s:complexType>
      </s:element>
     <s:element name="HexadecimalResponse">
     <s:complexType>
     <s:sequence>
      <s:element minOccurs="0" maxOccurs="1" name="HexadecimalResult" type="s:string" /> 
      </s:sequence>
      </s:complexType>
      </s:element>
      </s:schema>
      </wsdl:types>
     <wsdl:message name="BinarySoapIn">
      <wsdl:part name="parameters" element="tns:Binary" /> 
      </wsdl:message>
     <wsdl:message name="BinarySoapOut">
      <wsdl:part name="parameters" element="tns:BinaryResponse" /> 
      </wsdl:message>
     <wsdl:message name="OctalSoapIn">
      <wsdl:part name="parameters" element="tns:Octal" /> 
      </wsdl:message>
     <wsdl:message name="OctalSoapOut">
      <wsdl:part name="parameters" element="tns:OctalResponse" /> 
      </wsdl:message>
     <wsdl:message name="HexadecimalSoapIn">
      <wsdl:part name="parameters" element="tns:Hexadecimal" /> 
      </wsdl:message>
     <wsdl:message name="HexadecimalSoapOut">
      <wsdl:part name="parameters" element="tns:HexadecimalResponse" /> 
      </wsdl:message>
    <wsdl:portType name="ServiceSoap">
     <wsdl:operation name="Binary">
      <wsdl:input message="tns:BinarySoapIn" /> 
      <wsdl:output message="tns:BinarySoapOut" /> 
      </wsdl:operation>
     <wsdl:operation name="Octal">
      <wsdl:input message="tns:OctalSoapIn" /> 
      <wsdl:output message="tns:OctalSoapOut" /> 
      </wsdl:operation>
     <wsdl:operation name="Hexadecimal">
      <wsdl:input message="tns:HexadecimalSoapIn" /> 
      <wsdl:output message="tns:HexadecimalSoapOut" /> 
      </wsdl:operation>
      </wsdl:portType>
     <wsdl:binding name="ServiceSoap" type="tns:ServiceSoap">
      <soap:binding transport="http://schemas.xmlsoap.org/soap/http" /> 
    <wsdl:operation name="Binary">
      <soap:operation soapAction="http://tempuri.org/Binary" style="document" /> 
    <wsdl:input>
      <soap:body use="literal" /> 
      </wsdl:input>
    <wsdl:output>
      <soap:body use="literal" /> 
      </wsdl:output>
      </wsdl:operation>
     <wsdl:operation name="Octal">
      <soap:operation soapAction="http://tempuri.org/Octal" style="document" /> 
     <wsdl:input>
      <soap:body use="literal" /> 
      </wsdl:input>
     <wsdl:output>
      <soap:body use="literal" /> 
      </wsdl:output>
      </wsdl:operation>
     <wsdl:operation name="Hexadecimal">
      <soap:operation soapAction="http://tempuri.org/Hexadecimal" 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="Binary">
      <soap12:operation soapAction="http://tempuri.org/Binary" style="document" /> 
     <wsdl:input>
      <soap12:body use="literal" /> 
      </wsdl:input>
     <wsdl:output>
      <soap12:body use="literal" /> 
      </wsdl:output>
      </wsdl:operation>
    <wsdl:operation name="Octal">
      <soap12:operation soapAction="http://tempuri.org/Octal" style="document" /> 
     <wsdl:input>
      <soap12:body use="literal" /> 
      </wsdl:input>
     <wsdl:output>
      <soap12:body use="literal" /> 
      </wsdl:output>
      </wsdl:operation>
     <wsdl:operation name="Hexadecimal">
      <soap12:operation soapAction="http://tempuri.org/Hexadecimal" 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/NumConvert/Service.asmx" /> 
      </wsdl:port>
     <wsdl:port name="ServiceSoap12" binding="tns:ServiceSoap12">
      <soap12:address location="http://localhost/NumConvert/Service.asmx" /> 
      </wsdl:port>
      </wsdl:service>
      </wsdl:definitions>
    14.2.
  5. Если необходимо сообщить более подробную информацию для пользователей по каждому из доступных в этой веб-службе методов достаточно будет добавить параметр Description в атрибуте WebMethod, например:
    [WebMethod (Description = "Перевод целого числа в двоичную систему счисления")]
    public string Binary(int x) 
    {
      return Convert.ToString(x, 2);
    }

    В результате в браузере будет получена следующая страница:


  6. Выберите метод Binary. При этом должна загрузиться веб-страница вида:

    В результате работы веб-службы (после ввода числа и нажатия кнопки "Запуск") будет создана загрузится следующая страница:


Контрольное задание

Создайте ASP.NET веб-службу, поддерживающую три метода, возвращающие соответственно название текущего дня недели, номер текущего дня в месяце, номер текущего дня в году.

Для получения необходимых данных на стороне сервера можно использовать свойства и методы:

Label1.Text = DateTime.Now.DayOfWeek.ToString();
Label1.Text = DateTime.Now.Day.ToString();
Label1.Text = DateTime.Now.DayOfYear.ToString();
< Лекция 12 || Самостоятельная работа 14 || Самостоятельная работа 15 >
Михаил Олифиренко
Михаил Олифиренко
Александр Табачук
Александр Табачук

Это только у меня не работает кнопочка "Получить код DreamSpark"? Пишет "временно не доступно..." А когда заработает?