Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Работа с компонентами не из .NET



Вспомните, что при компиляции объектов в.NET Framework они должны выдать описываюшие их метаданные. Эти данные используются системой Common Language Lntime (CLR), чтобы загружать объекты без всякого вмешательства разработчика. от вас требуется — это только поместить объекты в каталог /bin. E Впрочем, более старые объекты, которые не были созданы в.NET Framework, та-|>й способностью не обладают. (Их часто называют объектами Component Object toodel (объектная модель компонентов) или СОМ-объектами.) CLR не может автома-Ечески управлять этими объектами или выполнять их автоматическую загрузку, да и Ьт таких метаданных, которые могли бы "рассказать" CLR об этих объектах. Разработчикам приходится регистрировать такие объекты вручную. Для этого используется Ьограмма REGSVR32.exe, которая помешает соответствующую информацию в системный реестр Windows (это такое место, где хранится информация обо всех приложениях и компонентах, которые установлены на машине).

Эти СОМ-объекты не создаются в среде.NET, поэтому с помощью CLR они не управляются и называются неуправляемым кодом. Из-за этого системе ASP.NET сейчас приходится напряженно работать, чтобы разобраться с использованием этих объектов. Кроме того, во время проектирования устанавливать значения СОМ-объектов нельзя.

В ASP.NET до сих пор поддерживается использование этих объектов с помощью метода CreateObject (создать объект) класса HttpServerUtility (серверная утилита HTTP). Названный метод принимает строку, которая описывает местоположение объекта в системном реестре, и использует это местоположение для установки свойств объектов. Эта строка называется progld. Вот соответствующий синтаксис: Server.CreateOb ject(progld)

Например, в страницах классической ASP операции ввода-вывода выполняются с помощью FileSystemObject (объект файловой системы) из библиотеки Scripting (создание сценариев). Этот метод осуществляет некоторые из действий, выполняемых также теми классами, которые вы изучали в 13-й главе, "Чтение и запись файлов на Web-сервере". Чтобы использовать этот объект в своей странице, необходимо применить примерно такой фрагмент:

dim objFSO as object

objFSO = Server.CreateObject("Scripting.FileSystemObject")

Например, в листинге 15.9 показано, как отображать путь к данному файлу. Листинг 15.9. Использование СОМ-объектов______________________________ ,...,,.,..^.

1: <%В Page Language="VB" %> 2:

3: <script runat="server">

4: sub Page_Load{obj as object, e as eventargs)

5: dim objFSO, objFile

6: objFSO = Server.CreateObject _

7: ("Scripting.FileSystemObject")

8: objFile = objFSO.File _

9: (Server.MapPath("../dayl3/log.txt")}

10:

11: IblMessage.Text = objFile.Path

12: end_sub

13: </script>

14: - '

15: <htmlxbody>

16: <asp:Label id="lblMessage" runat="server"/>

17: </bodyx/html>

B строках 6 и 8 соответственно создаются два объекта: Scripting.File SystemObject и Scripting.File. Эти объекты потом можно использовать для выполнения некоторых действий ввода/вывода — таких, например, как отображение полного пути к файлу. Вывод, полученный при выполнении этого листинга, показан на рис. 15.7.

Рис. 15.7. Система ASP.NET поддерживает использование старых, неуправляемых СОМ-объектов

Впрочем, использовать FileSystemObject не слишком интересно, потому что в.NET Framework есть объекты и получше. Это, например, такие объекты, как TextReader (читатель текста) и TextWriter (записыватель текста), которые являются полностью объектно-ориентированными. Кто действительно получает пользу от способности.NET применять СОМ-объекты, так это разработчики, которые уже создали множество специальных СОМ-объектов. Во многих организациях, имеющих собственные Web-узлы, используется несколько СОМ-объектов. Эти СОМ-объекты выполняют операции, аналогичные тем, которые сегодня уже делались с помощью бизнес-объектов. Представляете, какая получилась бы огромная неразбериха, если бы пришлось переписывать все эти СОМ-объекты?

Кроме того, с помощью СОМ-объектов также доступны возможности многих других приложений. Например, в своих страницах ASP.NET вы можете создавать документы Microsoft Word и выполнять с ними различные действия. Такая возможность имеется благодаря СОМ-методам, предоставляемым приложением Word. Все СОМ-объекты этого приложения являются неуправляемым кодом, но их все равно можно использовать в.NET Framework.

j Впрочем, использование СОМ-объектов имеет определенный недостаток.

! Из-за того что нет метаданных, связанных с этими объектами, системе ASP.NET приходится напряженно работать, чтобы определить, данные какого типа объект принимает и отдает назад, и часто этой системе приходится заниматься преобразованием типов данных. Такой процесс называется подгонкой (marshalling). При ее выполнении из-за роста накладных расходов, требуемых на обработку, производительность, наоборот, уменьшается. Поэтому подгонки надо стараться, по возможности, избегать.

К счастью, в комплекте с.NET Framework также поставляется программа, которая может преобразовывать неуправляемые СОМ-объекты в управляемые.NET-объекты. Эта программа, которая называется Type Library Importer (импорт библиотек типов),

аначизирует СОМ-объект и создает соответствующие метаданные, с помощью которых вы можете этот объект использовать в своих приложениях ASP.NET. Тогда каждое такое приложение следует выполнять с помощью файла tlbimp.exe.

Предположим, например, что в ваших страницах ASP.NET надо, не прибегая к подгонке, использовать объект FileSystemObject. Он хранится в файле scrrun.dll, который обычно находится в каталоге c:\winnt\system32. Откройте окно командной строки и перейдите в названный каталог. Затем введите в этом окне следующую команду:

tlbimp scrrun.dll /out:scrrun_net.dll

В результате ее выполнения из СОМ-файла scrrun.dll будет создан другой файл, scrrun net.dll, причем вместе с соответствующими метаданными. Вы должны будете.^видеть нечто похожее на вывод, который показан на рис. 15.8.

Рис. 15.8. Программа tlbhnp.exe импортирует старые СОМ-объекты в систему.NET Framework

Копируйте этот новый файл в ваш кэш сборки (c:\inetpub\wwwroot\tyaspnet21days\bin). Теперь в предыдущем листинге нужно кое-что изменить, чтобы он использовал новый, управляемый, объект FileSystemObject. Пример использования этого нового объекта показан в листинге 15.10.

Листинг 15.10. Использование импортированных СОМ-объектов

1: <%@ Page Language="VB" %>

2:

3: <script runat="server">

4: sub Page Loadfobj as object, e as eventargs)

5: dim objFSO as new Scrrunjiet.FileSystemObject

6: dim objFile as Scrrun_net.File

7: objFile = objFSO.GetFile(Server.MapPath _

8: {Server.MapPath("../dayl371og.txt "})

9:

10: IblMessage.Text = objFile.Path

П: end sub

12: </script>

13:

14: <htmlxbody>

15: <asp:Label id="lblMessageH runat="server"/>

16: </bodyx/html>

Теперь вы возвращаетесь к уже знакомому вам созданию экземпляров объектов. Обратите внимание, что FileSystemObject теперь принадлежит пространству имен Scrrun_net, и имя этого пространства такое же, как и у созданного вами файла. Благодаря этому у нового-листинга по сравнению с предыдущим резко возрастает производительность, что, в свою очередь, дает возможность использовать старые СОМ-объекты точно так же, как и любые.NET-объекты.

На самом же деле система.NET Framework никакого преобразования СОМ-объектов в.NET-объекты не делает. Она имеет упаковщик (wrapper), который генерирует необходимые метаданные, но при этом никаких изменений в самом объекте не делает. Так что CLR все равно в полной мере СОМ-объекты не поддерживает.





Дата публикования: 2015-02-03; Прочитано: 256 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...