* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Создание экземпляров элементов управления ActiveX
8 февраля 2009
ActiveX — это одна из реализаций СОМ, поэтому процедура добавления ссылки на библиотеку типов элементов управления ActiveX практически не отличается от та- ковой для библиотеки СОМ. Выполнив ее, вы получаете возможность добавить эле- менты управления ActiveX на Toolbox, чтобы в период разработки добавлять их эк- земпляры к приложению.
Примечание Размещение элементов управления ActiveX на вкладке Windows Forms допустимо, хотя существенно снижает производительность. Поэтому элементы уп- равления ActiveX следует использовать, только если нет .NET-элементов управле- ния с соответствующими функциями. > Создание экземпляра элемента управления ActiveX 1. Добавьте ссылку на библиотеку типов, в которой находится нужный элемент уп- равления ActiveX (о добавлении ссылок рассказывалось немного раньше). 2. Поместите элемент управления ActiveX на панель Toolbox, как описано в главе 7. 3. Чтобы добавить к проекту экземпляр элемента управления в период разработки, перетащите его с Toolbox в окно дизайнера. Это можно сделать и по-другому, объявив класс элемента управления и создав его экземпляр в коде. Второй под- ход позволяет динамически создавать элементы управления ActiveX в период выполнения (глава 2). Доступ к Web-сервисам Web-сервисы (Web Service) — классы, размешенные в Интернете, — без сомнения относятся к важным компонентам .NET Framework. После объявления и создания экземпляра Web-сервиса в приложении вы сможете синхронно или асинхронно вызвать его методы. Ссылки на Web-сервисы также создают в окне Solution Explorer. Для этого нуж- но вызвать это окно, щелкнуть правой кнопкой узел References, расположенный ниже узла вашего проекта, и выбрать из контекстного меню команду Add Web Reference — откроется одноименное окно (рис. 8-5), в котором задают URL Web- компонента, или находят его, если URL неизвестен. В последнем случае вы получите доступ к каталогам, в которых хранится нуж- ный ресурс. В каталоге Universal Description Discovery Integration (UDDI) хранится список провайдеров, которые предоставляют услуги в виде Web-сервисов. При вы- боре провайдера отображается список предоставляемых им Web-сервисов. Если щелкнуть Web-сервис, в левой панели появляется контакт XML, а в правой — имя Web-сервиса. Чтобы увидеть более «дружественное» описание Web-сервиса, удали- те из URL строку «7WSDL» и перезагрузите страницу. Найдя нужную Web-ссылку, щелкните кнопку Add Reference, чтобы добавить ее в проект. При создании экземпляра Web-сервиса .NET Framework в действительности со- здает экземпляр класса гтрокси, представляющего этот Web-сервис. Класс прокси существует в приложении и предоставляет все методы, поддерживаемые Web-сер- висом. Вызов любого из этих методов передается Web-сервису, который находится в Интернете по заданному адресу. Экземпляры Web-сервисов создают так же, как экземпляры любых других компонентов. Следующий пример демонстрирует созда- ние экземпляра Web-сервиса WebServicel'. Visual Basic .КЕТ Dim myService As New WebServicel Visual C# WebServicel myService - new WebService1(); Вызвать Web-сервис можно синхронно либо асинхронно. Синхронный вызов на- поминает вызов обычной функции. В следующем примере показан синхронный вызов метода myMethod Web-сервиса myService. Этот пример предполагает наличие ссылки на экземпляр этого Web-сервиса: Visual Basic .NET myService. myMethodO Visual C# myService.myMethod(); Синхронный вызов метода Web-сервиса исполняется так же, как вызов обычно- го метода. Но, поскольку при этом происходит обращение к ресурсам Интернета, время отклика увеличивается, а исполнение приложения приостанавливается до завершения синхронного вызова Web-метода. Чтобы избежать задержек в работе программы из-за ожидания завершения вызова Web-сервиса, можно вызывать ме- тоды Web-сервиса асинхронно. В этом случае создается отдельный поток для взаи- модействия с Web-сервисом, а пока Web-сервис обрабатывает запрос, исполнение программы продолжается, как обычно. На каждую синхронную версию метода Web- сервиса приходятся по две асинхронные, имена которых образуются из имени син- хронной версии Web-метода и префиксов Begin и End. Так, если у Web-сервиса есть метод MyMethod, его асинхронные версии называются BeginMyMefhod и EndMy- Method. Асинхронный вызов Web-метода начинается с вызова соответствующего метода Begin. Помимо обычных параметров, требуемых при синхронном вызове, методу Begin необходим делегат AsyncCailback, представляющий метод обратного вызова для данного Web-метода, и параметр типа Object, позволяющий приложению переда- вать нестандартные сведения о состоянии. Каждый метод Begin возвращает значение типа lAsyncResult. Этот интерфейс ис- пользуется соответствующим методом End для извлечения результатов асинхрон- ного метода. Сигнатура метода обратного вызова, заданного делегатом AsyncCailback, должна включать параметр типа lAsyncResult. В свою очередь, метод обратного вызова вызывает метод End, который извлекает данные. Следующий пример иллю- стрирует асинхронный вызов метода MyMethod с указанием метода обратного вызо- ва и извлечение результатов MyMethod. При этом предполагается, что MyMethod — это метод Web-сервиса с именем WebServicel, возвращающий строковое значение. Visual Basic .NET Public Class AsyncDemo Dim myService As WebServicel Public Sub CallMethodAsynchronouslyO myService - New WebServicel () Создать делегат AsyncCallback с помощью оператора AddressOf. Этот объект необходим для вызова метода, но в этом примере он не используется. myService. BeginMyMethodfAddressOf CallBack, New ObjectO) End Sub Public Sub CallBack(ByVal e as lAsyncResult) Dim myString As String Данные извлекают с помощью метода 'End', передав ему в качестве параметра объект lAsyncResult. myString = myService. EndMyMethod(e) End Sub End Class Visual C# public class AsyncDemo myService ~ new WebService1(); // Создать делегат AsyncCallback, указывающий метод обратного вызова. System. AsyncCallback myCallBack - new System. AsyncCallback( CallBack ); // Этот объект необходим для вызоаа метода, но // в этом примере он не используется. myService. BeginMyMethod(nyCallBack, new objectf)): } public void CallBackflAsyncResult e) { string myString; // Данные извлекают с помощью метода 'Enc', передав ему // в качестве параметра объект lAsyncResult. myString = myService. EndMyMethod(e); Указать метод обратного вызова необходимо, но использовать его не обязатель- но, поскольку можно извлечь данные в методе Begin, вызвав End напрямую. Если метод End вызывается асинхронно, исполнение программы приостанавливается до его завершения. Вот пример, иллюстрирующий это: Visual Basic .NET Public Sub AsyncDemoO Dim myService As New WebServicel Dim Async as ZAsyncResult ' Записать lasyncResult, который вернул метод 'Begin' в локальную ' переменную. Делегат метода обратного вызова необходим, но для извлечения данных он не используется. Async - myService.BeginMyMethod(AddressOf SomeMethod, New ObjectO) ' Здесь выполняются действия, сильно загружающие процессор. Dim iiyString As String 1 Если метод Begin еще не завершился, исполнение приложения приостанавливается, пока это не произойдет. nyString = myService.EndMyMethod(Async) Erd Suo Visual C# public void AsyncDemoO { WeoServicel myService = new WeoService1(): lAsyncResult Async; // Записать lasyncResult, который вернул метод 'Begin' в локальную // переменную. Делегат метода обратного вызова необходим, // но для извлечения данных он не используется. System.AsyncCallback myCallBack - new System.AsyncCallback(SomeMethod); Async = myService.BeginMyMetnod(myCallBack, new object()); // Здесь выполняются действия, сильно загружающие процессор, string rnyString; /,/ Если метод Begin еще не завершился, исполнение приложения // приостанавливается, пока это не произойдет. myString = myService.EndMyMethod(Async); } ^ Создание ссылки на Web-сервис 1. В окне Solution Explorer щелкните правой кнопкой узел References и выберите из контекстного меню команду Add Web Reference. 2. Укажите ссылку на Web-сервис, найденный в каталоге UDDI, либо введите ад- рес Web-сервиса вручную. Щелкните кнопку Add Reference, чтобы добавить ссылку в проект. 3. Добавив ссылку, можно создавать экземпляры Web-сервиса, как обычно. *• Как синхронно вызвать метод Web-сервиса 1. Создайте экземпляр Web-сервиса. 2. Вызовите нужный метод, как обычно. ^ Как асинхронно вызвать метол Web-сервиса 1. Объявите метод обратного вызова, принимающий параметр типа JAsyncResult. 2. Инициируйте асинхронный вызов. Для этого вызовите метод Begin соответству- ющего Web-метода, передав ему делегат метода обратного вызова. 3. Из метода обратного вызова (или другого метода) вызовите соответствующий метод End, чтобы извлечь данные; передайте ему объект IAsyncResu.lt, который вернул метод Begin.