Обработка баз данных на Visual Basic®.NET - Джеффри Мак-Манус
Шрифт:
Интервал:
Закладка:
Использование компонента в другом приложении
Попробуем теперь использовать созданный компонент в совершенно другом приложении. Для этого нужно создать новое приложение Visual Basic .NET на основе шаблона Windows Application среды Visual Studio .NET и создать в нем ссылку на файл Novelty1.dll, который располагается в каталоге bin проекта Novelty1. При использовании компонента из другого пространства имен или другого проекта нужно помнить, что dll-файл компонента находится в каталоге bin своего проекта. Например, dll-файл Web-приложения с именем Web_приложение обычно находится в каталоге с:inetpubwwwrootWeb_приложениеbin.
Для указания ссылки на внешний компонент щелкните правой кнопкой мыши на элементе References в окне Solution Explorer и выберите в контекстном меню команду Add Reference. В диалоговом окне References щелкните на кнопке Browse и укажите dll-файл используемого компонента. Для закрытия диалогового окна References щелкните на кнопке OK. В данном примере предполагается, что dll-файл используемого компонента Novelty1.dll находится в каталоге c:inetpubwwwroot Novelty1bin.
Здесь следует напомнить, что, как и при работе с прежним приложением Windows, после указания директивы Imports его пространство имен становится полностью доступным. В общем вспомогательный код Web-формы из листинга 12.7 напоминает код из листинга 12.6. Он создан на основе шаблонного кода, сгенерированного конструктором Web-форм среды Visual Studio .NET.
Листинг 12.7. Вспомогательный код Web-формы Form1.vbImports Novelty1.GetRowCount
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Windows Form Designer generated code "
Public Sub New() MyBase.New()
' Этот вызов метода организован конструктором Web-форм.
InitializeComponent()
' Инициализация после вызова метода InitializeComponent().
End Sub
' Переопределение метода Dispose для очистки списка компонентов.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
' Код, созданный конструктором Web-форм.
Private components As System.ComponentModel.IContainer
' ЗАМЕЧАНИЕ: Код, созданный конструктором компонентов.
' Его можно изменять только с помощью конструктора
' Не изменяйте его вручную в окне редактирования кода.
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents Button1 As System.Windows.Forms.Button
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.Label1 = New System.Windows.Forms.Label()
Me.Button1 = New System.Windows.Forms.Button()
Me.SuspendLayout()
'
' Label1
'
Me.Label1.Location = New System.Drawing.Point(8, 16)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(248, 16)
Me.Label1.Tablndex = 0
Me.Label1.Text = "Label1"
'
' Button1
'
Me.Button1.Location = New System.Drawing.Point(264, 8)
Me.Button1.Next = "Button1"
Me.Button1.Size = New System.Drawing.Size(72, 24)
Me.Button1.TabIndex = 1
Me.Button1.Text = "Test It!"
'
' Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(344, 54)
Me.Controls.AddRange(New System.Windows.Forms.Control() _
{Me.Button1, Me.Label1})
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)
End Sub
#End Region
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal е As System.EventArgs) Handles Button1.Click
Dim GRC As New Novelty1.GetRowCount()
Label1.Text = "There are " & GRC.GetRowCount.ToString _
& " rows in the table."
GRC.Dispose ()
End Sub
End Class
В код, созданный конструктором форм, добавлены только объекты Label1 и Button1. Текст надписи будет задан только во время выполнения приложения. Теперь можно приступить к созданию Web-службы.
Доступ к объектам с помощью Web-служб
Итак, мы приступаем к работе на совершенно новом уровне, т.е. с использованием Web-служб. С самого начала Web-среда рассматривалась как способ передачи данных между двумя точками. Именно эта исходная концепция способствовала развитию и популяризации Web-среды. Однако она обладала несколькими ограничениями и только недавно консорциум World Wide Web Consortium (W3C) начал реализовывать стандарты технологии обмена данными. Реализация Web-служб на платформе .NET основана именно на этих стандартах и использует язык XML для идентификации и передачи данных.
Допустим, что компания Jones Novelties, Incorporated решила предоставить другим компаниям быстрый доступ к своим данным без необходимости создания пользовательского интерфейса. Для решения этой задачи прекрасно подходят Web-службы.
Прежде чем приступить к решению этой бизнес-ситуации, следует привести основные сведения о Web-службах. Читатели с опытом создания Web-служб могут пропустить остаток этого раздела без ущерба для понимания остального материала или освежить свои знания, бегло познакомившись с ним.
По определению Web-службы – это объекты, которые обмениваются данными с помощью протоколов Internet, например HTTP. Причем для определения данных или набора выполняемых сервером инструкций используется XML. Эти инструкции также могут возвращать данные. Например, для включения нового пользователя с фамилией Doe и именем John в базу данных можно послать некому воображаемому Web-серверу www.someserver.com следующий запрос:
http://www.someserver.com/sevices/dataserver.asmx?op=AddUserToDB&FName= John&LName=Doe
В данном примере используется протокол HTTP и запрос GET для вызова службы dataserver, которая имеет функцию AddUserToDB с двумя параметрами – FName и LName. Было бы просто замечательно, если бы у нас был способ доступа к Web-службе и информирования о выполняемых действиях. К счастью, Microsoft вместе с несколькими другими компаниями предусмотрела эту возможность и создала язык определения Web-служб Web Services Description Language, или WSDL (эта аббревиатура произносится как английское словосочетание wiz-dull). WSDL способен анализировать код Web-службы и находить ту информацию, которую нужно сообщить пользователям (людям или машинам) о данной Web-службе и выполняемых ею функциях. Пример такой функции приводится далее, в разделе о программном способе доступа к Web-службе.
Как уже отмечалось, доступ к Web-службе осуществляется с помощью HTTP-протокола (методы GET и POST). Основное различие между ними заключается в том, что при использовании GET параметры запроса передаются в URL-указателе, а при использовании POST – инкапсулируются внутри самого запроса.
Кроме того, для взаимодействия Web-служб разработан протокол объектного доступа Simple Object Access Protocol (SOAP), который позволяет Web-серверам обмениваться сообщениями с инструкциями запросов, заключенными в конверт (envelope). SOAP-конверт имеет формат XML, как показано в приведенном ниже примере.
<?xml version="1.0" encoding"utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3c.org/2001/XMLSchema-insatance" xmlns:xsd="http://www.w3c.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ShowGetRowCountResponse xmlns="http://localhost/">
<ShowGetRowCountResult>int</ShowGetRowCountResult>
</ShowGetRowCountResponse>
</soap:Body>
</soap:Envelope>
Для передачи такого запроса необходимо создать собственный Web-запрос и послать его серверу. К счастью, на платформе .NET в пространстве имен System.NET для выполнения этих действий предусмотрены специальные средства, которые существенно упрощают выполнение этой задачи.
Рассмотрим бизнес-ситуацию, для решения которой следовало бы применить Web-службы.
База данных содержит имена 100 тыс. человек в возрасте от 14 лет до 21 года. Вместе с этими данными хранятся постоянно обновляемые ответы посетителей Web-узла на ежедневно обновляемые вопросы. Допустим, что компания Pepsi хочет регулярно знакомиться с результатами таких опросов, например за 1 млн долларов в месяц. Как предоставить ей доступ к вашей базе данных? Именно в такой ситуации пригодятся Web-службы.
Приведем еще один сценарий.
Допустим, что некий Web-узел выполняет аутентификацию входа на другие Web-узлы, которые платят ежемесячную абонентную плату и предоставляют пароль и учетное имя для создания cookie-файлов на клиентских компьютерах с обозначением аутентификации пользователей. Похоже на службу Microsoft Passport, не так ли? В этой ситуации также пригодятся Web-службы.
Web-службы дают разработчику возможность публиковать свои функции в Web-среде (Internet) или корпоративной среде (intranet), которые входят в состав других приложений или баз данных и располагаются на том же или на другом компьютере, о которых разработчик может даже не подозревать. Web-службы, по сути, стали именно тем, для чего разрабатывались COM-компоненты, но Web-службы можно вызывать с любого компьютера, подключенного к Internet или внутренней сети под управлением любой операционной системы.