:: Меню ::

Головна
  • Про сайт
  • Введення
  • Середовище програмування VB .NET: Visual Studio .NET
  • Вирази, оператори і передача управління
  • Класи і об'єкти
  •  Спадкоємство і інтерфейси
  • Обробка подій і делегати
  • Обробка помилок в VB .NET
  • Форми Windows, графічний вивід і друк
  • Уведення-виведення
  •  Багатопотокові застосування
  • Підтримка баз-даних в VB .NET
  • Короткий огляд ASP .NET
  • Складки .NET, установка додатків і COM Interop
  • Книга для гостей
    Контакти
    Добавити у вибране

    :: Друзі ::

     
     

    :: Лічильники ::

    = =

     

     

     

     

    Проста web-служба

    Як згадувалося в розділі 9, безпосереднє витягання інформації з web-страниц — процес повільний (із-за необхідності аналізувати всю сторінку) і ненадійний, оскільки структура сторінки може змінитися. Зручним засобом отримання таких даних з web-сайта є web-служба (Web service).

    Інакше кажучи, сайт надає свою функціональність засобами, з якими можна працювати в програмах (з погляду програміста VB сайт, на якому працює web-служба, нагадує компонент, який надає свою функціональність програмі).

    Виражаючись точнішим, web-служба є функціональною можливістю сервера, з якою клієнт працює за допомогою HTML, XML і стандартних протоколів Web.

    У .NET створення web-служб, використовуваних в клієнтських програмах, стає справою майже елементарною. По суті, для цього досить визначити клас .NET і помітити його члени, доступні через web-службу, атрибутом <Webmethod( )>. Розглянемо простий приклад — допустимий, ми створюємо web-службу для повернення інформації про погоду.

    Для простоти в нашому прикладі повертані дані жорстко кодуються у функції Getweather.

    Створіть новий проект web-службы, для чого слід вибрати значок ASP .NET Web Service в діалоговому вікні New Project. Результат показаний на мал. 12.3.

    Мал. 12.3. Проект web-службы в IDE

    Двічі клацніть на дизайнерові і звернете увагу на код, що автоматично згенерував:

    Public Class Servicel

    Inherits System.Web.Services.WebService

    Клас System. Web. Services. Webservi це є базовим для всіх web-служб .NET. Завдяки спадкоємству у вашому розпорядженні опиняються всі можливості цього класу, у тому числі і властивість Context для отримання запиту HTTP, використаного для звернення до сторінки через Web.

    Включите наступний фрагмент перед командою End Class:

    <Webmethod()>Public Function Getweather(Byval City As String)

    As String Select Case City

    ' Отримати інформацію про погоду в Сиеттле

    Case "Seattle"

    Return "The current temperature is 64 degrees. " & _

    "and raining of course."

    Case Else

    Return "Can't find data for " & City & "."

    End Select

    End Function

    При натисненні клавіші F5 VS .NET IDE автоматично генерує web-страницу на зразок показаної на мал. 12.4. На цій сторінці приводиться загальна інформація про web-службе.

    Мал. 12.4. Сторінка, що автоматично згенерувала, з описом web-службы

    При створенні web-службы VS.NET IDE автоматично генерує XML-файл з описом служби, написаний на мові WSDL (Web Service Language Description). Програмісти COM можуть розглядати його як аналог бібліотеки типів. Редагування файлу, що згенерував .vsdisco дозволяє змінити інформацію про web-службе, WSDL, що міститься у файлі. Зокрема, мал. 12.4 був отриманий на підставі коди WSDL.

    Використання web-службы на стороні клієнта

    Якщо клацнути на посиланні Getweather на мал. 12.4, в броузере завантажується сторінка, показана на мал. 12.5. На сторінці приведений код, який може використовуватися для звернення до web-службе. У розділі «SOAP» описується доступ до служби через протокол SOAP, заснований на XML. Цей протокол відрізняється найбільшою гнучкістю, але простим його не назвеш. У простому варіанті звернення до web-службе використовується запит HTTP GET. Прототип виглядає таким чином:

    /Webservicel/servicel.asmx/

    Getweather?city=string Нttр/1.1

    Host:local Host

    Мал. 12.5. Простий варіант використання web-службы

    Введіть в текстовому полі рядок Seattle і натисніть кнопку Invoke. Зразковий вид сторінки показаний на мал. 12.6.

    Мал. 12.6. Результати звернення до web-службе

    Результат представлений у форматі XML, що дозволяє легко проаналізувати дані в програмі. Також звернете увагу на те, що в коді, що автоматично згенерував, показане, як звертатися до web-службе за межами IDE. Для цього необхідно лише згенерувати правильний запит HTTP GET або SOAP. Нижче приведений приклад побудови запиту GET в консольному застосуванні, що використовує для відправки запиту GET класи Webrequest і Webresponse простору імен System.Net:

    1 Imports System.Net

    2 Imports System.I0

    3 Module Module1

    4 Sub Main()

    5 Dim myresponse As Webresponse

    6 Try

    7 Dim mywebservicerequest As Webrequest

    8 mywebservicerequest - Webrequest.Create _

    9 ("http://localhost/webservicel/servicel.

    asmx/getweather?dty=SeattIe")

    10 myresponse = _

    11 mywebservicerequest.GetResponse()

    12 Dim theanswer As String

    13 Dim astream As New Streamreader

    (myresponse.GetResponseStream)

    14 theanswer = astream.ReadToEnd

    15 Msgbox(theanswer)

    16 Catch e As Exception

    17 Console.WriteLine(e.Message)

    18 Finally

    19 myresponse. Close()

    20 End Try

    21 End Sub

    22 End Module

    Ключова роль в цьому лістингу належить рядку 8 (що продовжується в рядку 9), в якій серверу передається запит GET. Як було показано в розділі 9, результатом є потік даних, використовуваний для побудови Streamreader (рядок 13). Рядок 14 читає в строкову змінну весь текст потоку. Рядок 19 закриває об'єкт запиту HTTP і звільняє всі пов'язані з ним ресурси. До речі, змінна myresponse була оголошена в рядку 5 саме тому, що при оголошенні її в блоці Try (рядки 6-15) змінна виявилася б недоступною для секції Fi nal ly. Результат виконання програми показаний на мал. 12.7.

    Мал. 12.7. Результат звернення до web-службе з використанням запиту GET

    Із запитами SOAP справа йде дещо складніше. Навряд чи кому-небудь захочеться генерувати їх уручну. Замість цього можна скористатися командою Project > Add Web Reference або утилітою командного рядка wsdl.exe, що входить в постачання .NET Framework. Обидва варіанти приводять до одного результату — генерується допоміжний клас-посередник, який використовується в програмі.

    Мабуть, вирішення з утилітою командного рядка відрізняється більшою гнучкістю. Нижче показано, як виглядав командний рядок в нашому випадку. Хоча приведений приклад розбитий на два рядки, його слід ввести в одному рядку:

    "С:\program Fi1es\microsoft.NET\FrameworkSDK\Bin\wsdl"/language:VB"

    http://localhost/webservicel/servicel.asmx?wsdl

    При запуску з ключем /language: VB утиліта створює файл з кодом допоміжного класу Servicel.vb, що за умовчанням знаходиться в одному каталозі з wsdl.exe (вихідний каталог задається ключем out). Основний код класу, що згенерував, виглядає так (ключові рядки виділені жирним шрифтом):

    Option Strict Off

    Option Explicit On

    Imports System

    Imports System.Diagnostics

    Imports System.Web.Services

    Imports System.Web.Servi ces.Protocols

    Imports System.Xml.Serialization

    'This source code was auto-generated by wsdl,version=l.0.2914.16.

    <System.Web.Servi ces.WebServi cebi ndi ngattri bute(Name:="servicelsoap". [Namespace ]:="http://tempuri,org/")> _

    Public Class Servicel

    Inherits System.Web.Services.Protocols.SoapHttpClientProtocol

    <System.Diagnostics.DebuggerStepThroughAttri bute()> _

    Public Sub New() Mybase.New Me.Url ="http://localhost/WebServicel/Servicel.asmx"

    End Sub

    <System.Diagnostics.DebuggerStepThroughAttri bute().

    System.Web.Services.Protocols.

    Soapdocumentmethodattri bute _

    ("http://tempuri.org/GetWeather".

    Use:=system.Web.Services.Description.

    Soapbindinguse.Literal.

    Parameterstyle:=system.Web.Services.

    Protocols.SoapParameterStyle.Wrapped)> _

    Public Function Getweather(Byval city

    As String)As String

    Dimresults() As Object=me.Invoke

    ("Getweather". New Object 0 {city})

    Return Ctype(results(0). String)

    End Function

    <System.Diagnostics.

    Debuggerstepthroughattribute()> _

    Public Function Begingetweather(Byval city As String._

    Byval callback As System.AsyncCallback.

    Byval asyncstate As Object) As System.IAsyncResult

    Return

    Me.Beginlnvoke("Getweather", New Object()

    {city}.call back.asyncState)

    End Function

    <System.Diagnostics.DebuggerStepThroughAttributet)> _

    Public Function Endgetweather(Byval asyncresult

    As System.IAsyncResult) As String

    Dim results()As Object = Me.EndInvoke(asyncresult)

    Return

    Ctype(results(0), String)

    End Function

    End Class

    Потім в проект включається код класу (або посилання на нього) і посилання на складки System. Web, System. XML і System. Web.Services. Залишається лише створити екземпляр допоміжного класу і викликати функцію Getweather!

    Тепер, коли ви знаєте, як отримати результати звернення до web-службе, неважко уявити собі наступні можливі кроки:

    • об'єднання результатів декількох звернень до web-службам в одному файлі;
    • застосування до результату запиту перетворень XSL і побудова нових сторінок з HTML-кодом за допомогою web-служб, що працюють на різних сайтах.

    Перед нами один з проявів тієї концепції, яку зараз активно упроваджує Microsoft, — Web як глобальна мережа, через яку користувач легко дістає доступ до будь-яким необхідним даним.

     




    :: Наша кнопка ::

    Отримати код:

    Підтримайте наш сайт і розмістіть нашу кнопку на своєму ресурсі.


    :: Реклама ::

    Скачати безкоштовно програму Microsoft Front Page 2003


    :: Посилання ::

    -


     

     

     


    Copyright ©