Asp семейство application staticobjects


Содержание

Asp семейство application staticobjects

Вы можете использовать данный метод для того, чтобы сделать доступной информацию между всеми пользователями данного приложения. Основанное на ASP приложение определено как все .asp-файлы в виртуальной директории и всех ее поддиректориях. Из-за того, что объект Application может быть доступен («зашарен») более чем одному пользователю, то в нем предусотренно два метода — Lock и Unlock (заблокировать и разблокировать) для того, чтобы быть уверенным, что сразу несколько пользователей не смогут попытаться изменять свойства одновременно.

Синтаксис:

Application . метод

Коллекции:

Методы:

События:

Скрипты, которым могут предшествовать события должны быть описаны в файле global.asa. Для получения более полной информации по этому файлу смотрите описание Global.asa

Замечания:

Вы можете хранить свои значения в коллекциях данного объекта: Application.Contents и Application.staticObjects. Информация, сохраненная в коллекции Application доступны через приложение. Следующий скрипт демонстрирует запись двух типов переменных.

Для каждой из этих переменных предполагается их членство в коллекции Application Contents.

Вы можете также связать компонент с переменной. Если вы связываете сомпонент к переменной с помощью объекта Server.CreateObject, то переменная будет членом коллекции Application.Contents. Если переменная связана с тэгом , то переменная будет членом коллекции Application StaticObjects.

Если вы связываете конкретный компонент с переменной в коллекцией Application Contents Collection и используете Visual Basic Scripting Edition как основной язык написания скриптов, вы должны использовать ключевое слово Set. Это иллюстрированно следующим примером.

Вы можете также определить методы и свойства компонента MyComponent следующим скриптом

или путем создания локальной копии объекта и использования его следующим образом:

Другой способ, чтобы создать объект с использованием тэга в файле Global.asa. Для более полной информации смотрите описание Global.asa.

Вы не можете хранить встроенные объекты в объекте Application. Для примера, каждый из следующих строк будет вызывать ошибку:

Если вы храните массив в объекте Application то вы не должны пытаться обращаться к элементам, хранящимся в массиве напрямую. К примеру, следующий скрипт не работает

>Настоятельно рекомендуется чтобы, если вы храните массив в объекте Application, вы получили копию массива прежде чем считывать или изменять любые его элементы. Кода вы сделали такую копию вы можете изменить или считать любые его элементы и измененную локальную копию сохранить обратно в Application. Данный прием мы продемонстрируем в следующем примере:

NumVisits для хранения числа посещений, когда страница была получена клиентом. Метод Lock вызывается тогда, когда есть возможность того, что к переменной NumVisits может возникнуть паралелльное обращение. Вызывая метод Unlock вы разрешаете обращаться к данной переменной (объекту Application) другим пользователям.

Коллекция Application. Contents

Коллекция Contents группирует все элементы, которые были добавлены приложением через команды скрипта. Вы можете использовать коллекцию Contents чтобы получить список элементов, которые были получены приложением или чтобы указать какой из элементов будет использован в данной операции.

Синтакс:

Application.Contents( ключ )

Параметры:

ключ
Указанное имя элемента для его получения.

Замечание:

Коллекция Application.Contents содержит те элементы которые были определены на уровне приложения без использования тэга . Это касается обеих объектов — созданных с использованием Server.CreateObject и с использованием скалярных переменных установленных через определение Application. В следующем скрипте, к примеру, оба и MyVar и MyObj будут членами коллекции Application.Contents.

Коллекция Application.Contents поддерживает циклы типа For. Each и For. Next.
Следующие два примера иллюстрируют каждый из вышеуказанных методов циклов использования Application.Contents.

Коллекция Application. StaticObjects

Коллекция StaticObjects содержит все объекты, созданные с использованием тэга и объекта Application. Вы можете использовать коллекцию для того, чтобы определить значения указанных свойств для объекта или создать цикл по коллекции и получить все свойства для всех статических объектов.

Синтакс:

Application.StaticObject( ключ )

Параметры:

ключ
Указанное имя элемент для обращения к нему.

Замечание:

Вы можете использовать управление циклом чтобы перебирать ключи в коллекции StaticObjects. Это продемонстрированно следующим примером:

Метод Application. Lock

Метод Lock блокирует для других клиентов переменные, хранимые в объекте Application от изменеия. Потому, как только один клиент может в данный момент времени получить доступ к переменным объекта. Если вы не вызываете метод Unlock после обработики переменных, то сервер сам разблокирует данный объект, когда истечет время (timeout) работы скрипта .asp.

Синтакс:

Application.Lock

Пример:

бШ посетитель данной страницы.

В предыдущем примере метод Lock предохраняет переменную NumVisits объекта Application от доступа к нему одновременно нескольких клиентов. Если бы приложение не было бы заблокированно, то два клиента попробывали-бы одновременно увеличить значение переменной NumVisits.

Метод Application. Unlock

Метод Unlock разблокирует заблокированные ранее переменные c помощью метода Lock.

Синтакс:

Application.Unlock

Пример:

Вы посетитель данной страницы.

В предыдущем примере метод Unlock разблокирует переменную NumVisits объекта Application, заблокированную ранее объектом Lock от доступа к нему одновременно нескольких клиентов.

Событие Application_OnEnd

Данное событие активизируется, когда приложение закрывается, а точнее после события Session_OnEnd. Только встроеные объекты Application и Server доступны.

Синтакс:

Параметры

язык_программирования
параметр, который указывает на то, каким языком будет написан скрипт. Например JavaScript или VisualBasic.

Замечания

Вы не можете вызывать метод MapPath (объект Server) в подпрограмме Application_OnEnd.

Событие Application_OnStart

Данное событие активизируется, когда активируется новая сессия, такая, как, к примеру, Session_OnStart. Только встроенные объекты Application и Server доступны. Обращение к объектам Session, Request или Response в подпрограмме Application_OnStart вызовет ошибку.

Синтакс:

Параметры

язык_программирования
параметр, который указывает на то, каким языком будет написан скрипт. Например JavaScript или VisualBasic.

В чем разница между Application.Contents и Application.StaticObjects в классическом ASP?

В объекте Application в Classic ASP есть две коллекции:

  • Application.StaticObjects , заполненный разделами в global.asa
  • Application.Contents , заполненный любым кодом, который решает хранить там что-то, включая разделы

2 ответа

Я никогда не сталкивался с необходимостью или преимуществом использования в Global.asa, а не просто с использованием Contents в событии OnStart .

Помимо того, как объекты заканчиваются экземплярами и помещаются в эти коллекции, между ними нет реальной разницы. Объекты должны быть свободными и многопоточными.

Мой совет — просто игнорировать StaticObjects и работать с простым кодом.

Это две разные коллекции. Идея преимущества / недостатка не применима.


Коллекция содержимого приложения:

Коллекция содержимого — это группа всех элементов, которые были добавлены в приложение с помощью команды сценария.

Коллекция приложений StaticObjects:

Коллекция StaticObjects содержит все объекты, созданные с тегами в области объекта Application.

ASP Application Object

An Active Server Page application is actually a collection of ASP files in a virtual directory and associated sub-directories. The Application object is used to control and manage all items that are available to all users of an Active Server application. The Application items can be variables needed for all users in the application, or they can be instantiated objects that provide special server-side functionality.

The Application object is initialized by IIS when the first .asp page from within the given virtual directory is requested. It remains in the server’s memory until either the web service is stopped or the application is explicitly unloaded from the web server (using the Microsoft Management Console).

The syntax, collections, methods and events of the ASP Application object are as follows:

Asp семейство application staticobjects

Представленная ниже страница, лишь часть огромного сайта посвященного различной компьютерной документации, на сайте собрано более 800 мб информации. Если Вы не нашли в этой статье, то что Вы ищите попробуте посмотреть здесь, cпросить на форуме или поискать необходимую Вам информацию в нашем каталоге ссылок сайтов компьтерной тематики.

Если же Вы хотите приобрести бумажную копию представленных здесь
материалов, обращайтесь в наш книжный магазин.

С уважением,
команда разработчиков eManual.ru

Объект Application
Программы • Железо • Драйверы • Хостинг • Энциклопедия рекламы

Описание объекта Application

Вы можете использовать данный метод для того, чтобы сделать доступной информацию между всеми пользователями данного приложения. Основанное на ASP приложение определено как все .asp-файлы в виртуальной директории и всех ее поддиректориях. Из-за того, что объект Application может быть доступен («зашарен») более чем одному пользователю, то в нем предусотренно два метода — Lock и Unlock (заблокировать и разблокировать) для того, чтобы быть уверенным, что сразу несколько пользователей не смогут попытаться изменять свойства одновременно.

Синтаксис:

Application . метод

Коллекции:

Методы:

События:

Скрипты, которым могут предшествовать события должны быть описаны в файле global.asa. Для получения более полной информации по этому файлу смотрите описание Global.asa

Замечания:

Вы можете хранить свои значения в коллекциях данного объекта: Application.Contents и Application.staticObjects. Информация, сохраненная в коллекции Application доступны через приложение. Следующий скрипт демонстрирует запись двух типов переменных.

Для каждой из этих переменных предполагается их членство в коллекции Application Contents.

Вы можете также связать компонент с переменной. Если вы связываете сомпонент к переменной с помощью объекта Server.CreateObject, то переменная будет членом коллекции Application.Contents. Если переменная связана с тэгом , то переменная будет членом коллекции Application StaticObjects.

Если вы связываете конкретный компонент с переменной в коллекцией Application Contents Collection и используете Visual Basic Scripting Edition как основной язык написания скриптов, вы должны использовать ключевое слово Set. Это иллюстрированно следующим примером.

Вы можете также определить методы и свойства компонента MyComponent следующим скриптом

или путем создания локальной копии объекта и использования его следующим образом:

Другой способ, чтобы создать объект с использованием тэга в файле Global.asa. Для более полной информации смотрите описание Global.asa.

Вы не можете хранить встроенные объекты в объекте Application. Для примера, каждый из следующих строк будет вызывать ошибку:

Если вы храните массив в объекте Application то вы не должны пытаться обращаться к элементам, хранящимся в массиве напрямую. К примеру, следующий скрипт не работает

>Настоятельно рекомендуется чтобы, если вы храните массив в объекте Application, вы получили копию массива прежде чем считывать или изменять любые его элементы. Кода вы сделали такую копию вы можете изменить или считать любые его элементы и измененную локальную копию сохранить обратно в Application. Данный прием мы продемонстрируем в следующем примере:

NumVisits для хранения числа посещений, когда страница была получена клиентом. Метод Lock вызывается тогда, когда есть возможность того, что к переменной NumVisits может возникнуть паралелльное обращение. Вызывая метод Unlock вы разрешаете обращаться к данной переменной (объекту Application) другим пользователям.

Коллекция Application. Contents

Коллекция Contents группирует все элементы, которые были добавлены приложением через команды скрипта. Вы можете использовать коллекцию Contents чтобы получить список элементов, которые были получены приложением или чтобы указать какой из элементов будет использован в данной операции.

Синтакс:

Application.Contents( ключ )

Параметры:

ключ
Указанное имя элемента для его получения.

Замечание:

Коллекция Application.Contents содержит те элементы которые были определены на уровне приложения без использования тэга . Это касается обеих объектов — созданных с использованием Server.CreateObject и с использованием скалярных переменных установленных через определение Application. В следующем скрипте, к примеру, оба и MyVar и MyObj будут членами коллекции Application.Contents.

Коллекция Application.Contents поддерживает циклы типа For. Each и For. Next.
Следующие два примера иллюстрируют каждый из вышеуказанных методов циклов использования Application.Contents.

Коллекция Application. StaticObjects

Коллекция StaticObjects содержит все объекты, созданные с использованием тэга и объекта Application. Вы можете использовать коллекцию для того, чтобы определить значения указанных свойств для объекта или создать цикл по коллекции и получить все свойства для всех статических объектов.

Синтакс:

Application.StaticObject( ключ )

Параметры:

ключ
Указанное имя элемент для обращения к нему.

Замечание:

Вы можете использовать управление циклом чтобы перебирать ключи в коллекции StaticObjects. Это продемонстрированно следующим примером:

Метод Application. Lock

Метод Lock блокирует для других клиентов переменные, хранимые в объекте Application от изменеия. Потому, как только один клиент может в данный момент времени получить доступ к переменным объекта. Если вы не вызываете метод Unlock после обработики переменных, то сервер сам разблокирует данный объект, когда истечет время (timeout) работы скрипта .asp.

Синтакс:

Application.Lock

Пример:

бШ посетитель данной страницы.

В предыдущем примере метод Lock предохраняет переменную NumVisits объекта Application от доступа к нему одновременно нескольких клиентов. Если бы приложение не было бы заблокированно, то два клиента попробывали-бы одновременно увеличить значение переменной NumVisits.

Метод Application. Unlock

Метод Unlock разблокирует заблокированные ранее переменные c помощью метода Lock.

Синтакс:

Application.Unlock

Пример:

Вы посетитель данной страницы.

В предыдущем примере метод Unlock разблокирует переменную NumVisits объекта Application, заблокированную ранее объектом Lock от доступа к нему одновременно нескольких клиентов.

Событие Application_OnEnd

Данное событие активизируется, когда приложение закрывается, а точнее после события Session_OnEnd. Только встроеные объекты Application и Server доступны.

Синтакс:

Параметры

язык_программирования
параметр, который указывает на то, каким языком будет написан скрипт. Например JavaScript или VisualBasic.


Замечания

Вы не можете вызывать метод MapPath (объект Server) в подпрограмме Application_OnEnd.

Событие Application_OnStart

Данное событие активизируется, когда активируется новая сессия, такая, как, к примеру, Session_OnStart. Только встроенные объекты Application и Server доступны. Обращение к объектам Session, Request или Response в подпрограмме Application_OnStart вызовет ошибку.

Синтакс:

Параметры

язык_программирования
параметр, который указывает на то, каким языком будет написан скрипт. Например JavaScript или VisualBasic.

16.2 ASP objects and their applications on the Web

16.2 ASP objects and their applications on the Web


16.2.1 The structure of ASP

Basically, ASP is an environment that allows you to write Web pages using a variety of scripting languages. In fact, you can use several scripting languages within a single ASP page to enhance the functionalities via scripting library scenarios. Since server scripts are read and processed on the server before being sent back to the browser, there is no client requirement for ASP. As a server page inside the server, an ASP page (or document) requires a new file extension .asp to distinguish it from the usual XHTML document.

By default, ASP uses VBScript and JScript as the processing languages. If you want to use another scripting language, you may need to install the appropriate scripting engine, which is a program that can process commands and statements written in a particular language. For every installation of ASP, VBScript and JScript are provided. We will show you how to install another scripting engine called PerlScript in the next section. A structure diagram of ASP is shown in Fig. 16.3.

Figure 16.3. Calling an ASP page

To use the multiple languages feature of ASP and related objects, let’s consider some examples in the discussion below.

16.2.2 Creating ASP pages with different scripting languages

In this section, we will show you how to use different languages with ASP. Simple examples of three scripting languages are introduced, namely, VBScript, JScript, and PerlScript. They all have their own language syntax and style and work in the ASP environment as family members.

Another characteristic of ASP is that it is object based. System objects will work closely with your choice of scripting languages. That means you can use your favorite language syntax and style such as VBScript, JScript (a variant of ECMAScript), or PerlScript to call ASP objects to perform the function you want.

As a simple example, consider the following ASP page written in VBScript:

The first line is to indicate that this is an ASP page using VBScript as the primary language. This means that statements inside the delimiters and %> (lines 813) will be processed by the VBScript engine installed in ASP. By default, VBScript is the primary language for ASP. Insider the delimiters, there is a for-loop in VBScript style. Consider the statement in line 10:

The keyword Response is an object provided by ASP. With this object, you can call the member function (or method) Write() to output something to the browser screen. Inside the parentheses, the ampersand «&» is a VBScript symbol to concatenate two strings.

The JScript version of this example is listed below:

The process directive in line 1 indicates that the primary language is JScript (JScript is a version of JavaScript developed by Microsoft; for this reason, JScript is very similar to ECMAScript discussed in this book). The for-loop (lines 913) inside the delimiters is written in JScript (or ECMAScript) style. The plus «+» symbol is used to concatenate strings. No matter what kind of language you are using, you call the same method

to output something to the screen.

If you want to use another scripting language such as PerlScript on ASP, a PerlScript engine is available from ActiveState Perl (www.activestate.com). It has a Perl version with a Microsoft installer so that the installation and configuration on various Microsoft systems are fully automatic. When you install Active Perl, you will have a working version of the Perl interpreter and a PerlScript engine for ASP at the same time.

If you have a PerlScript engine already installed on your system, you can convert the example above into a PerlScript version as follows:

Again, the first line is to instruct ASP to process statements inside delimiters with PerlScript. The purpose of the for-loop is to show the calling convention when using PerlScript with ASP. Following the PerlScript syntax, all variables need to have a dollar sign in front of them. Since PerlScript uses references to call objects and functions provided by ASP, the output function is changed to $Response->Write() as illustrated in lines 11 and 12. The period symbol «.» used in lines 11 and 12 is to concatenate the strings. In fact, you can put the variable $ii inside, since Perl can interpret a variable correctly even inside a string.

In ASP, the primary scripting language can call functions defined in other scripting languages. To show this feature, consider the following example:

By default, this ASP page uses VBScript as the primary scripting language. Other scripting languages can be defined by the

Inside the script section, you can define any JScript function. The keyword runat=server is to instruct the ASP to run this section on the server. The block in lines 1420 defines a JScript function called outputDate() to display the date and time of the system. Another script block in lines 2330 defines a PerlScript subroutine called outString . This subroutine is to output some strings to the browser window.

When ASP loads this page, the ASP script section (if any) is stored and executed first. Therefore, when ASP executes the JScript statement in line 10

the JScript function outputDate() is already there and ready for execution. If you put any output statement inside the ASP script section, this statement will be executed and placed before the XHTML header. A screen shot is shown in Fig. 16.4.

Figure 16.4. Multiple scripting languages on ASP

For the rest of this chapter, we will mainly use JScript as the primary scripting language for ASP. We make this choice simply because JScript is consistent with the standard ECMAScript and acceptable by many different platforms. To learn ASP, a basic understanding of the internal objects provided by ASP installation is necessary.

Not just multiple languages can be used in ASP: with ASP objects Web applications can be developed in other dimensions. Let’s consider the ASP objects and see how to build Web pages with application- and user-specific (or session) scopes in the next section.

16.2.3 The internal objects of ASP

Basically, ASP is a combination of XHTML, your favorite scripting language, and objects provided by you, the system, and third-party vendors. For a standard ASP installation, the system framework provides the following six built-in objects:

Built-in objects are closely integrated into every ASP page. Unlike other components, you don’t even need to create them before you can use them in your scripts. For each built-in object, there are methods (or functions), collections, and properties associated with them. For example, the function Response.Write() used in section 16.2.2 is a function inside the Response object.

From a practical point of view, the best way to learn ASP is to start with one favorite scripting language such as JScript and a basic understanding of the objects associated with ASP. Basically, there are six ASP objects, as above, and the purpose of each of them is summarized as follows:

The Application object is an object providing collections and utilities to share information among all users of a given application.

The ObjectContext object is mainly used for transactions and enables you to commit or abort a transaction in a business application.

The Request object is a widely used object in ASP. You can use it to gather the contents submitted from any type of Web form including the CGI get and post methods, and to read server variables or the contents of a digital client certificate.

The Response is widely used and responsible for sending data from the server to the user. You can use this object to send information directly to the browser, redirecting the browser to other URLs and handling cookies.

The Server object is to provide certain server-side functions to the users. The most important function is to create an instance of an ActiveX component with Server.CreateObject . For example, you can use it to open a file. Furthermore, the following statement can be used to instantiate an ActiveX Data Object (ADO) for database connection:

We will discuss this application in detail in the coming sections.

The Session object enables you to associate variables with a particular user section. Information or variables stored in this object are still alive when a Web application jumps from one page to another.

From ASP 3.0 and later, an additional built-in object called ASPError has been shipped. This object is responsible for tracking down errors during the processing of an ASP page.

For each ASP built-in object, we also have collections, methods, events, and properties associated with them. Their relationships are summarized in Table 16.1.

Table 16.1. ASP built-in objects

ClientCertificate Cookies Form QueryString ServerVariables

CreateObject HTMLEncode MapPath URLEncode

AddHeader AppendToLog BinaryWrite Clear End Flush Redirect Write

Buffer CacheControl Charset ContentType Expires ExpiresAbsolute IsClientConnected PICS Status

CodePage LCID SessionID Timeout

One of the best ways to study ASP objects is to learn and use the methods associated with the particular object. For example, the popular Write() methods of the Response object can be called by the following ASP statement:

This statement will output the text «Some Strings» to the browser. If you want to redirect your ASP page to another page or location, you can use the Redirect method of the Response object as

On the whole, ASP provides a rich set of tools to build Web applications. From simple data sharing for Web pages to large, complex Web programming, these objects and their features are invaluable. We will show you how to use most of them step by step. Now, let’s begin with the Application object.

16.2.4 Creating ASP pages with application scope

The Application object of ASP can be used to share information among all users. For example, if you defined a welcome message

your other ASP pages used by other users can obtain this text by

In fact, the message is stored in Application.Contents , which is a collection of the object (see Table 16.1). Any information in Application.Contents can be retrieved by name. Therefore, the Response.Write() statement above can output the text. Not just text, but for any variables or events the entire object can be put into the Application object and shared among all your ASP pages. This feature is known as information with application scope.

Data or information with application scope will remain available for the live time of the application. That means they are available for all users visiting the site until after a system reboot. Unlike file storage, information with application scope is not permanent but can exist for a long period of time. This feature is particularly useful for certain kinds of applications described below. But first, let’s consider the two methods provided by the Application object.

Since Application is an object designed for multiple accesses at the same time, it contains two methods (or functions), Lock() and Unlock() . You can use the Lock() function to lock the system and store variables or created objects to the Contents of the object. The Applicaton.Contents is a collection of the object and all information stored in it that can be retrieved later by other Web pages. In its simplest form, you can use it to build a temporary page counter to pick up a winner based on the number of visits or page hits. For this application, you don’t need to create a file and it would not affect the permanent page counts. Consider the following ASP page:

For a busy site, it is likely that simultaneous access occurs at the same time. To avoid any counting confusion, the Lock() function in line 13 is used to lock the page for exclusive access and update. Since locking the page prevents any page updating by others, you should unlock the page as soon as you have finished the updating.

The scripting block in lines 2125 contains a simple if statement. This statement is to pick up the winner when the page hits are the same as the winning number winNo . Some screen shots of this example in action are shown in Figs 16.5a and 16.5b.

Figure 16.5a. ex16-06.asp

Figure 16.5b. Pick up the 100th visitor

16.2.5 Building user scope applications with the Session object

In addition to the Application object, the Session object can be used to store information needed for a particular user session. When a user who does not already have a session requests an ASP page, the Web server automatically creates a Session object for him or her. Variables and information can be stored in this Session object dedicated to this user. This feature is usually called session scope.

You can use the same method as for the Application object to store messages for the Session object. For example, if you define the following text and store it in the Session object

the string will be stored in a variable called welcome of the Session object. All visitors to this ASP page will have this message defined in an independent session. The message can be retrieved later by:

Information stored in the Session object is not discarded when the user jumps between pages. When a user finishes his or her session or the abandon method is called, all information and objects stored in the session will be destroyed.


Also, the Session object provides a SessionID property to identify each session and user. It is a unique identifier with a long integer data type generated by the Web server. For example, the following command generates a SessionID :

Many Web sites use this feature to build user identity when the user visits the site. This identity is used to identify the user and give away free gifts, say. Consider the example below:

This is a simple ASP page to demonstrate the use of the Session object. Lines 1113 start a session with a simple message stored in the variable welcome . This message is later retrieved by the Session statement in line 16. The SessionID is displayed as well. Next, there is a conditional statement to give away a free gift.

Basically, we use two more session variables gift and gift_detail . If the gift variable stores the string «yes» that means the user has already claimed his or her free gift and the details of the free gift are displayed (line 25). If the user has not claimed his or her free gift, the messages in lines 2022 are displayed. In particular, the message in line 2122:

uses an anchor element to activate the ASP page ex16-07a.asp to claim the gift.

Surprisingly, the ASP page ex16-07a.asp contains only six lines:

Since this page is invisible to the user, it can be written as pure ASP code. In fact, this page has three statements only. The first statement is to assign a session variable called gift to the string «yes.» The second statement in line 4 provides the details of the free gift. The final statement uses the Redirect function of the Response object to redirect the user back to the original page ex16-07.asp. Some screen shots of this example are shown in Figs 16.6a and 16.6b.

Figure 16.6a. ex16-07.asp

Figure 16.6b. Claim your free gift

This example has session scope and every user or activation will be assigned a SessionID . Unless you have many gifts, you may also need to ask the user to fill out a claim form in order to make a claim.

начинающий ASP.net действительно путают о StaticObjects и как объявить его

Я новичок в ASP.net, я сделал некоторые исследования о состоянии приложения. Я знаю об объявлении нового состояния приложения внутри Application_start события.

Но когда я посмотрел в библиотеке MSDN (которая не помогает вообще, к сожалению). Я нашел этот пункт:

Кроме того, вы можете добавить объекты в коллекцию StaticObjects через декларации в файле Global.asax вашего веб-приложения. Состояние приложения определяется таким образом, может быть доступно из кода в любом месте вашего приложения. Следующий пример показывает декларацию объекта для определения состояния приложения значения:

Вы можете добавить объекты в коллекцию StaticObjects только в файле Global.asax. Коллекция бросает NotSupportedException если вы попытаетесь добавить объекты непосредственно с помощью кода.

Вы можете получить доступ к членам объектов, находящихся в состоянии приложения без необходимости ссылаться на коллекцию приложений. Следующий пример кода показывает, как ссылаться на элемент объекта, определенного в коллекции StaticObjects состояния приложения. Обратите внимание, что идентификатор метки определяется в Global.asax используется в качестве имени переменной.

Я действительно не знаю, как add objects to the StaticObjects collection via an declaration in your Web application’s Global.asax file.

  1. Как добавить тег?
  2. Что такое тег в первую очередь?
  3. Что такое StaticObject коллекция?
  4. Как добавить «метки» внутри Global.asax (код C #)?

Я знаю, что мои вопросы очень примитивные, но я действительно хочу, чтобы понять вещи хорошо.

Asp семейство application staticobjects

Есть два набора в Application object в классическом ASP:

  • Application.StaticObjects , filled in sections in global.asa
  • Application.Contents , filled by whatever code decides to store something there, including 1

2 ответы

I’ve never come across any need or advantage to use in the Global.asa as opposed to simply using Contents in the OnStart event.

Помимо того, что объекты в конечном итоге создаются и размещаются в этих коллекциях, между ними нет реальной разницы. Объекты должны быть свободными и потокобезопасными.

Мой совет будет просто игнорировать StaticObjects и работать с простым кодом.

Создание ASP-компонентов в Delphi 6

Что такое ASP

SP (Active Server Pages) — технология, которая позволяет создавать Web-страницы, содержащие код, выполняемый Web-сервером, и динамически формировать Web-страницы. Вместе с Microsoft Internet Information Services поставляется несколько COM-объектов, выполняющих серверный код. Современная версия этой технологии позволяет использовать в ASP-страницах произвольные серверные компоненты. Клиентское приложение, использующее ASP-объекты, представляет собой HTML-документ (куда могут также входить клиентский и серверный коды на скриптовых языках), который можно прочесть практически с помощью любого Web-браузера. Обычно эти HTML-документы размещаются на каком-либо Web-сервере (как правило, это Microsoft Internet Information Server версии 3.0 и выше). Web-сервер, получив требование о предоставлении документа, считывает его из локального хранилища и передает клиенту, при этом часть информации вносится в документ Web-сервером динамически; сам же Web-сервер в этом случае может обращаться к ASP-объектам (входящим в комплект поставки Internet Information Server или созданным сторонними разработчиками). Как правило, Web-документы, содержащие обращения к ASP-объектам, имеют расширение *.asp. Примеры подобных документов можно найти в каталогах, создаваемых при установке Internet Information Server.

Ранее (см. Компьютер Пресс, №2’2001, c. 169) мы рассказывали о создании простейших ASP-приложений, в том числе для работы с базами данных. Настоящую публикацию следует рассматривать как продолжение той статьи.

Объекты, используемые в ASP

ерархию объектов, используемых в технологии ASP, можно увидеть на рис. 1.

Объект Request

Объект Request используется для доступа к данным, которые формируются клиентом при обращении к ASP-серверу. Доступ к объекту Request получают с помощью интерфейса IRequest, которому присущи следующие основные свойства и методы:

  • свойство ClientSertificate — содержит значения всех полей клиентного сертификата, которые пересылаются в http-сообщении;
  • свойство Cookies — содержит значения всех заголовков Cookie в HTTP-запросе. Cookie — небольшие текстовые файлы, которые запоминаются на компьютере конечного пользователя и передаются на сервер в каждом запросе. С их помощью можно создать «сессию» для клиента: когда клиент обращается первоначально к одной, затем к другой странице и т.д. (при этом клиент не имеет права перейти к следующей странице, не обратившись к предыдущей);
  • свойство Form — если клиент осуществляет обращение к ASP-серверу с помощью формы, то можно получить значения заполненных полей в форме при обращении к свойству Form с добавлением имени поля;
  • свойство ServerVariables — содержат большинство переменных, необходимых для формирования HTTP-заголовков;
  • свойство TotalBytes — суммарное число байт, которые передаются клиентом на сервер. Реальное число байт может быть меньше, так как протокол HTTP не позволяет пересылать пакеты, размер которых превышает 8 Kбайт;
  • свойство QueryString — содержит имена и значения полей запроса при использовании метода GET;
  • свойство Body — содержит имена и значения полей запроса при использовании метода POST;
  • метод BinaryRead — используется для получения содержимого всего запроса, посылаемого клиентом, если размер запроса превышает 8 Kбайт. Вызов этого метода позволяет получить следующие 8 Kбайт данных HTTP-запроса. Вызов следует повторять до тех пор, пока не будет прочитан весь запрос; при этом размер последнего пакета может быть менее 8 Kбайт. Результаты вызова метода запоминаются в двоичном массиве. Следует обратить внимание на то, что после вызова этого метода нельзя обращаться к свойству Form.

Объект Response

В этом классе формируется отклик ASP-сервера, который передается клиенту. Доступ к этому объекту осуществляется через интерфейс IResponse. Основные свойства и методы данного интерфейса таковы:

  • свойство Cookies — позволяет создать коллекцию параметров вместе с их значениями. К этой коллекции также добавляется время, в течение которого данную коллекцию следует сохранять в клиентском приложении. При успешном получении отклика клиент запоминает эти параметры на диске в виде файла. При следующем обращении к серверу эти данные будут переданы в запросе и их можно будет получить при использовании свойства Request.Cookie. Анализ этих данных позволяет определить, обращался ли клиент к серверу ранее и если обращался, то с какими запросами. Cookie используются для создания «сессии» с клиентом в CGI-приложениях, поскольку IP-адреса клиента могут изменяться Proxy-серверами во время сессии. В ASP-приложениях возможно также создание сессии для клиента (это мы обсудим ниже);
  • свойство Buffer — если значение этого свойства равно True, то осуществляется буферизация отклика. При этом значении параметра отклик клиенту не отправляется до тех пор, пока не будет вызван метод Request.End (этот метод автоматически вызывается после обработки всего ASP-документа, то есть когда сформированы отклики от всех ASP-серверов) или Flush;
  • свойство CacheControl — определяет, может ли клиент кэшировать отклик;
  • свойство Charset — определяет имя шрифта для содержимого отклика ContentType=”text/html”;
  • свойство ContentType — указывает содержимое отклика. По умолчанию это свойство имеет значение text/html. Это значение необходимо изменять, например, при передаче картинок (image/jpeg или image/gif и т.д);
  • свойство Expires — при значении CacheControl=True определяет, сколько времени хранится отклик на клиентском месте;
  • свойство ExpiresAbsolute — то же самое, что Expires, только определяет абсолютную дату и время хранения отклика;
  • свойство IsClientConnected — указывает, был ли клиент отсоединен от сервера;
  • свойство Status — нормальное значение статуса «200 OK» означает успешную генерацию отклика. При невозможности создать отклик следует изменять значение статуса. Так, «401 Unauthorized» означает, что пользователю запрещено обращаться к данной странице по соображениям безопасности, например в случае неправильно введенного пароля;
  • метод AddHeader — добавляет заголовок в отклик. Заголовки добавляются в виде =” ”;
  • метод AppendToLog — добавляет строку в Log-файл Web-сервера. Эта строка не передается клиенту;
  • метод BinaryWrite — формирует двоичный отклик. Чаще всего используется для передачи клиенту картинок;
  • метод Clear — полностью очищает отклик. После этого его требуется формировать заново с самого начала;
  • метод End — прекращает обработку ASP-документа и немедленно возвращает результат клиенту. Вызывается автоматически после завершения обработки ASP-документа, но может быть вызван явно из кода ASP-сервера. После его вызова вызовы методов Write или BinaryWrite запрещены;
  • метод Flush — отправляет текущее содержимое буфера клиенту. Формирование отклика может продолжаться дальше;
  • метод Write — используется для записи текстовой информации в отклик;
  • метод Redirect — позволяет переадресовать запрос на другой URL. При этом можно поменять параметры запроса в объекте Request.

Объект Server

Этот объект позволяет обращаться к Internet Information Services и экспонирует ряд его методов и свойств:

  • свойство ScriptTimeout — время в минутах, в течение которого сессия существует без генерации нового запроса или без вызова команды Refresh со стороны клиента;
  • метод CreateObject — вызов этого метода используется для запуска COM-сервера, который будет принимать скрипты с ASP-документа и генерировать отклик, который вставляется вместо скрипта;
  • метод Execute — выполняет скрипт в указанном ASP-файле;
  • метод GetLastError — возвращает объект ASPError, в котором можно получить полную информацию о последней ошибке;
  • метод HTMLEncode — заменяет зарезервированные символы в HTML-документе подходящим набором символов, которые интерпретируются браузером и позволяют клиенту увидеть на экране зарезервированные символы. Например, дизайнер Web-сайта хочет, чтобы клиент увидел на экране следующее сочетание символов:
    . Если эту последовательность вставить в HTML-документ, то она будет интерпретирована как разрыв строки. Для этой последовательности символов метод HTMLEncode вернет: %3CBR%3E. При помещении этой последовательности символов в HTML-документ клиент увидит на экране
    ;
  • метод MapPath — конвертирует путь, выраженный в терминах виртуальных каталогов (абсолютный или относительный), в путь к физическому каталогу на данном компьютере;
  • метод Transfer — пересылает весь текущий отклик к другому ASP-серверу для продолжения формирования отклика;
  • метод URLEncode — перекодирует URL, включая специальные символы, в строку.

Объект Session

Этот объект создается во время первого обращения клиента к ASP-серверу. Замечательная особенность этого объекта — его способность сохраняется в течение некоторого времени после генерации отклика клиенту. Если в течение этого времени клиент вновь обратится к серверу, то сможет работать внутри ранее созданной сессии. Если внутри этого объекта объявить переменные, то в них можно запоминать состояние клиента. Этот факт значительно облегчает проведение сессий с клиентом по сравнению с CGI-приложениями, где постоянно приходится анализировать Cookie. Основные свойства и методы объекта Session:

  • свойство StaticObjects — коллекция всех объектов, добавленных к сессии при помощи тэга . Можно прочитать или изменить все значения свойств этих объектов. Вызов метода Remove удаляет данный объект. Вызов метода RemoveAll удаляет все объекты;
  • свойство Contents — коллекция всех динамически создаваемых объектов. Эти объекты можно создавать во время выполнения и использовать их при последующих обращениях клиентов к Web-серверу;
  • свойство CodePage — указывает страницу кодировки символов, которая может изменяться в зависимости от локальных настроек;
  • свойство LCID — языковой идентификатор, используемый для интерпретации текстовых строк;
  • свойство SessionID — идентификатор сессии для данного клиента. Генерируется автоматически и является постоянным для всех запросов данного клиента;
  • свойство Timeout — время в минутах, в течение которого существует сессия без генерации нового запроса или без вызова команды Refresh со стороны клиента;
  • метод Abandon — разрушает сессию и возвращает все ресурсы;
  • событие Session_OnStart — генерируется в момент создания сессии. Оно генерируется после события Application_OnStart, но до начала выполнения кода. Все переменные в сессии уже являются доступными, и к ним можно обращаться. Обработчик этого события должен быть написан на языке VBScript или JavaScript;
  • событие Session_OnEnd — наступает перед разрушением сессии по истечении времени TimeOut или после вызова метода Abandon. В обработчике событий можно работать с объектами Application, Server и Session, но не с Request и Response. Обработчик этого события должен быть написан на языке VBScript или JavaScript.

Для сохранения состояния клиента (это главная особенность) используется следующий синтаксис:

Рассмотрим в качестве примера Интернет-магазин. Предположим, пользователь на первой Web-странице выбирает наименование товара (например, Intel Processor), на второй странице — количество этого товара (например, 5), на третьей странице отображается цена, после чего ожидается подтверждение заказа. Ясно, что для генерации третьей страницы необходимо знать значения параметров с первых двух страниц. Поэтому после возвращения отклика с первой страницы используется команда:

Session.Value[‘GoodName’]:=’ Intel Processor ‘;

Имя выбранного товара можно получить после анализа свойств объекта Request. После второй страницы используем команду:

Перед генерацией третьей страницы можно узнать имя товара и, следовательно, цену за единицу продукции, а также количество единиц товара. Далее посредством простых арифметических операций вычисляется общая стоимость, и клиенту предлагается сделать заказ.

В объекте Session можно также запоминать динамически создаваемые объекты (об этом будет рассказано ниже).

Объект Application

Этот объект используется для хранения и обработки данных, которые являются общими для всех сессий. При помощи объекта Application можно передавать данные от одного клиента к другому. Основные свойства и методы объекта Application:

  • свойство Contents – содержит список всех объектов, которые были добавлены при выполнении скриптов из ASP-документов. Объект Contents имеет два метода: Remove удаляет данный объект, а RemoveAll удаляет все объекты. Сюда же можно помещать ссылки на динамически создаваемые объекты при выполнении кода ASP-сервера;
  • свойство StaticObjects — список всех объектов, которые были добавлены при помощи тэга ;
  • метод Lock. Клиенты работают в многопоточном режиме, а переменные в объекте Application являются общими для всех клиентов. Поэтому если надо обратиться к свойствам объекта Application или к методам, которые работают с переменными данного объекта, то обязательно требуется вызов метода Lock. Это дает возможность безопасно работать с переменными Application, в то время как остальные клиенты будут ожидать окончания работы с этим объектом. После чтения или записи свойства (либо окончания работы метода) требуется вызов метода Unlock, и только после этого переменные (методы) будут доступны для других клиентов;
  • метод Unlock — делает доступными переменные или методы объекта Application другим клиентам;
  • событие Appliation_OnStart — наступает в момент первого старта приложения и продолжается до создания сессии. Из обработчика этого события можно обращаться только к объектам Server и Application. Обработчик этого события должен быть написан на языке VBScript или JavaScript;
  • событие Application_OnEnd — вызывается в момент завершения ASP-приложения, после разрушения всех сессий. Доступные объекты и языки для описания обработчика те же, что и у обработчика Application_OnStart.

Использование объекта Session для хранения состояния

втоматическая обработка полей Cookie в ASP-технологии позволяет определить, обращался ли ранее клиент к данному Web-серверу. При первом обращении клиента для него создается объект Session. При последующих обращениях этого же клиента для него назначается ранее созданный объект Session. Объект Session разрушается либо при отсутствии в течение интервала времени Session.TimeOut новых запросов от клиентов, либо при вызове метода Session.Abandon из кода. В объекте Session можно хранить переменные и объекты, которые динамически создаются или изменяются. Эти изменения видны при каждом последующем обращении клиента. Таким образом, объект Session может хранить состояние клиента. Данная возможность, реализованная на уровне технологии, обеспечивает ASP-приложениям существенные преимущества по сравнению с CGI- и ISAPI-приложениями, где для хранения состояния необходимо писать трудоемкий код для работы с Cookie.

Для тестирования прежде всего требуется настроить Microsoft Internet Information Services (IIS). Для этого создадим виртуальную директорию IIS, которая обязательно должна иметь разрешение как на чтение (из нее будут читаться данные), так и на выполнениe скриптов (из нее будет загружен *.asp-документ). Директория должна быть доступна с помощью протокола HTTP. Поэтому в первую очередь нужно обратиться к Web-сервису Internet Information Server, просмотреть список доступных директорий и при необходимости создать новые с соответствующими правами доступа.

В нашем примере на компьютере, который имеет IP-адрес 192.168.0.2, была создана виртуальная директория /Test, соответствующая физическому адресу на компьютере C:\ASPTest. В директорию, имеющую права доступа Read и Script, был скопирован файл Test.asp. Сам файл ASP01.dll (COM-сервер) можно поместить в произвольную директорию. Главное — чтобы он был зарегистрирован в системном реестре. Для этого после выполнения команды Save As в Delphi 6 выберем команду меню Run/Register ActiveX server и выполним ее.

Продолжим работу с сессией. Воспользуемся проектом, создание которого было описано ранее (см. КомпьютерПресс, № 2’2001, c. 196). Исходный код проекта можно найти на нашем CD-ROM. Сначала разберемся, каким образом можно сохранять и изменять переменные. Для этого в секции private класса TTest модуля ASP01_U1 обьявим метод:

В каждом методе модуля ASP01_U1 вызовем метод IncrementCallCount с параметром Name= . Например, в ранее объявленном методе GetPicture (см. КомпьютерПресс, № 2’2001, с.196) обратимся к IncrementCallCount следующим образом:

Далее добавим в библиотеку типов новый метод GetCallCount, как было описано выше. Реализуем этот метод следующим образом:

И наконец, создадим ASP-документ с вызовом метода GetCallCount:

Сохраним этот документ в файле Test3.asp в директории C:\ASPTest (напомним, что она зарегистрирована в Internet Information Server и имеет разрешения на чтение и выполнение кода). Далее, обращаясь к ранее созданным ASP-документам, будем обращаться к объявленным ранее методам ASP-сервера в произвольной последовательности и произвольное число раз, пока, наконец, не дойдем до страницы Test3.asp. В результате получим примерно следующий отклик, какой представлен на рис. 2.

Напротив названия каждого метода стоит число обращений к нему клиента в текущей сессии. Если вызвать команду Refresh в браузере, то можно заметить, что число напротив надписи GetCallCount увеличится на 1.

Данные в коллекции Session.Value хранятся в виде вариантных переменных; иными словами, они могут принадлежать любому типу, конвертируемому в OleVariant: integer, single, double, WideString и т.д. Можно хранить и массивы — для этого вызывается функция VarArrayCreate. Доступ к переменным осуществляется по имени. Коллекция Session.Value возвращает пустое значение (null), если ранее переменная с данным именем не была добавлена к коллекции. Добавление новой переменной осуществляется в случае присвоения значения элемента коллекции с уникальным именем.


Однако ссылки на экземпляры классов (объекты) в этой коллекции хранить нельзя. Точнее говоря, хранить их можно: например привести указатель к типу integer и сохранить в коллекции Session.Value. Далее можно получать доступ к объекту приведением типа и таким образом при каждом следующем обращении клиента получать ссылку на объект и работать с ним. Казалось бы, все хорошо, однако при разрушении сессии по истечении TimeOut деструкторы объектов вызваны не будут. Это означает, что при работе такого сервера постепенно будут исчерпываться доступные системные ресурсы и в конце концов Web-сервер просто «рухнет». Если бы существовала возможность создать обработчик события Session_OnEnd в коде Delphi, то деструкторы можно было бы вызвать явно. Однако этот обработчик может быть создан только в ASP-документе на языках VBScript или JavaScript.

Выход из создавшейся ситуации заключается в использовании коллекции Session.Contents, которая предназначена для хранения объектов. В принципе, коллекция Session.StaticObjects также используется для хранения объектов, но ее нельзя модифицировать во время выполнения приложения. Идея хранения объектов в коллекции Session.Contents заключается в следующем: объекты, которые необходимо хранить, поддерживают интерфейс IUnknown (или его потомок). Именно ссылка на этот интерфейс и помещается в коллекцию Session.Contents. При закрытии сессии для всех интерфейсов, хранящихся в этой коллекции, вызывается метод Release. Соответственно из этого обработчика событий можно вызвать деструктор класса при равенстве нулю числа ссылок на интерфейс.

Для проверки вышесказанного попробуем решить следующую задачу: мы хотим помещать содержимое одной записи в базе данных на отдельную Web-страницу, давая пользователю возможность передвигаться по записям вперед и назад. В этом случае требуется запоминать положение указателя текущей записи в наборе данных, что будет выполняться в компоненте Session. Наиболее простой способ запомнить положение указателя текущей записи — не закрывать набор данных после формирования отклика пользователю.

Первоначально создадим ASP-документ, содержащий форму с двумя кнопками: Back и Next. В данном документе вызовем новый метод ASP-сервера, который назовем, например, TestSession. В этом методе будем анализировать запрос и смещать текущую запись вперед или назад. Сохраним документ в файле Test4.asp. Окончательный вид документа следующий:

Далее создадим новый модуль данных и поместим на него компоненты TADOConnection и TADOTable. В ADOConnection1 сошлемся на базу данных Northwind. В компоненте ADOTable1 сошлемся на ADOConnection1, свойству TableName присвоим значение Alphabetical list of products, а его свойство Active установим равным True. Это означает, что немедленно после отработки конструктора будет установлена связь с сервером баз данных. Объявим новый интерфейс ISessionObject — потомок IUnknown. Полезно к этому интерфейсу добавить метод, который будет возвращать указатель на модуль данных. Несмотря на то что использовать указатели в интерфейсах запрещено вследствие необходимости осуществлять маршалинг для разных модулей, в нашем случае это оправданно, поскольку данный метод будет использоваться только внутри модуля ASP01. Все внешние приложения (в том числе Internet Information Services) будут работать с этим интерфейсом как с Iunknown, не «зная» о существовании метода, возвращающего указатель.

Окончательный код выглядит следующим образом:

Данный код прост и не требует комментариев. Ключевой метод — ObjRelease — уменьшает число ссылок и при их равенстве нулю вызывает деструктор класса. Некоторые изменения потребуются и в классе TTest модуля ASP01_U1. Прежде всего необходимо вызвать конструктор класса TDataModule2. Наиболее подходящее место для вызова конструктора — событие Session_OnStart — недоступно из кода Delphi. Метод AfterConstruction также подходит мало — при обращении к нему не определены ссылки на объекты Session, Application, Server. Необходимо, чтобы эти объекты были инициализированы из интерфейса IScriptingContext — именно это и делает метод OnStartPage. Поэтому будем вызывать конструктор из метода TTest.OnStartPage. При этом следует учитывать, что конструктор мог быть вызван раньше — во время предыдущего запроса клиента. Следовательно, необходима предварительная проверка существования экземпляра класса TTest. Окончательно код будет выглядеть следующим образом:

Первоначально в переменную V пытаемся копировать переменную с именем DataModule, которая хранится в объекте Session. Если это не удается (что происходит, когда пользователь обращается к ASP-серверу в первый раз), то создаем экземпляр класса TDataModule2, получаем от него ссылку на интерфейс ISessionObject и запоминаем ее в объекте Session под именем DataModule. Теперь поведение экземпляра класса TDataModule2 будет корректным: он будет существовать, пока существует объект Session для данного клиента, и разрушаться с окончанием сессии. Чтобы убедиться в этом, достаточно переписать деструктор TDataModule2 и поместить туда оператор Beep (визуальные элементы управления в ASP-приложениях показывать запрещено). Если после этого вновь обратиться к ASP01 и затем выгрузить ASP-сервер, как было описано выше, то можно услышать звук динамика.

Осталось реализовать метод TestSession в классе TTest — он формирует отклик для клиента. В этом методе необходимо получить доступ к хранящемуся в объекте Session экземпляру класса TDataModule2, проанализировать запрос и при нажатии кнопки Next переместить курсор на следующую запись, а при нажатии кнопки Prior — на предыдущую. Окончательный код выглядит следующим образом:

В нем используется определенный ранее метод ISessionObject.getDataModule для получения ссылки на экземпляр класса TDataModule2. Скомпилировав этот проект и обратившись к созданной ранее странице Test4.asp, можно получить отклик, который представлен на рис. 3.

При нажатии клавиши Next получаем страницу со следующей записью; Prior — с предыдущей.

В заключение следует отметить, что объект Application также имеет аналогичные свойства для хранения переменных и объектов. Эти свойства имеют те же самые названия, что и в объекте Session. Существует два отличия использования аналогичных свойств объекта Application:

Зачем нужна коллекция StaticObjects когда HttpApplicationState могут быть обработаны HttpContext

я только что прочитал, мы можем получить доступ к HttpApplicationState с помощью приложения или StaticObjects

Я не ясно, почему нам нужны два различных подхода , как все, что я могу увидеть Приложение поможет вам добавить и прочитать код уровня при использовании staticobjects, мы можем добавить его в надстройку global.asax и прочитать, но не обновить

Это единственное различие или я не хватает некоторых основных функций статические объекты

Создан 22 мар. 14 2014-03-22 02:58:10 SIDDU HUSSAIN

ASP.NET Core: Создание справочных страниц веб-API ASP.NET с помощью Swagger

При создании высоконагруженных приложений бывает сложно разобраться в различных API. Сформировать качественную документацию и справочные страницы в рамках веб-API посредством Swagger с интеграцией Swashbuckle .NET Core так же просто, как добавить пару пакетов NuGet и изменить Startup.cs.

Второй цикл статей по ASP.NET Core

Введение

Для начала поговорим о терминологии:

  • Swashbuckle — это проект с открытым исходным кодом для создания документов Swagger для веб-API, построенных с помощью ASP.NET Core MVC.
  • Swagger — это машиночитаемое представление RESTful API, которое обеспечивает поддержку интерактивной документации, создание клиентских пакетов SDK и возможности обнаружения.

Данный учебный материал написан по примеру туториала «Создание первого веб-API с помощью ASP.NET Core MVC и Visual Studio». Если вам интересно, его можно скачать с GitHub.

Начало работы

Swashbuckle состоит из двух компонентов:

  • Swashbuckle.SwaggerGen: содержит функции для создания документов JSON Swagger, которые описывают объекты, методы, типы возвращаемых значений и так далее.
  • Swashbuckle.SwaggerUI: встроенная версия пользовательского интерфейса Swagger, который с помощью указанных выше документов создает индивидуально настраиваемый инструмент для описания функций веб-API и содержит функции тестирования для общедоступных методов.

Пакеты NuGet

Чтобы добавить Swashbuckle, можно воспользоваться одним из способов:

    С помощью консоли диспетчера пакетов:

В Visual Studio:

o Правой кнопкой мыши щелкните проект в Обозревателе решений > Управление пакетами NuGet.
o Введите в поле поиска текст Swashbuckle.
o Поставьте флажок Include prerelease (Включить предварительный выпуск).
o В качестве источника пакетов укажите nuget.org.
o Коснитесь Swashbuckle package (пакет Swashbuckle), а затем — Install (Установить).

Добавьте Swagger и настройте его в связующее ПО

Добавьте SwaggerGen в набор сервисов в методах Configure и ConfigureServices, активируйте связующее ПО для обработки созданного документа JSON и пользовательского интерфейса Swagger.

В Visual Studio нажмите F5 для запуска приложения и перейдите к http://localhost: /swagger/v1/swagger.json . Здесь вы увидите созданный документ, описывающий конечные точки.

Примечание: браузеры Microsoft Edge, Google Chrome и Firefox отображают документы JSON без дополнительных настроек. Для Chrome созданы расширения, позволяющие форматировать документ для удобства чтения. Ниже приведен сокращенный пример на JavaScript.

Этот документ используется для работы пользовательского интерфейса Swagger, доступного по адресу: http://localhost: /swagger/ui .

Каждый метод в контроллере ToDo можно протестировать из пользовательского интерфейса. Коснитесь метода, чтобы развернуть раздел, добавьте необходимые параметры и нажмите «Try it out!» (Попробовать).

Настройка и расширяемость

Swagger не только позволяет без труда представить API, но и содержит функции для документирования модели объекта и настройки внешнего вида и языка интерактивного пользовательского интерфейса.

Информация и описание API

Метод ConfigureSwaggerGen предназначен для добавления сведений об авторе и лицензии, а также описания.

На следующем рисунке показан пользовательский интерфейс Swagger с информацией о версии.

Комментарии XML

Чтобы включить комментарии XML, правой кнопкой мыши щелкните проект в Visual Studio и выберите Properties (Свойства). Затем поставьте флажок XML Documentation file (Файл документации XML) под разделом Output Settings (Настройки выхода).

Сконфигурируйте Swagger для использования созданного файла XML.

Примечание: для Linux и операционных систем, не принадлежащих к семейству Windows, имена файлов и каталогов чувствительны к регистру. Например, поиск файла с именем ToDoApi.XML возможен в Windows, но невозможен в CentOS.

В коде выше ApplicationBasePath получает путь к базовому каталогу приложения, что позволяет настроить полный путь к комментариям XML. TodoApi.xml работает только в этом примере, имя созданного файла XML с комментариями назначается на основе имени приложения.

Если использовать в методе комментарии с тремя косыми чертами, то можно улучшить пользовательский интерфейс Swagger: к заголовку раздела будет добавлено описание.

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

Для большей наглядности добавим , содержимое которого может представлять собой текст, объект JSON или XML для дальнейшего документирования метода.

Обратите внимание, как благодаря дополнительным комментариям улучшился пользовательский интерфейс.

DataAnnotations

В API можно добавить контроллер System.ComponentModel.DataAnnotations , чтобы улучшить элементы пользовательского интерфейса Swagger.

Добавление аннотации [Required] к свойству Name класса TodoItem меняет информацию ModelSchema в пользовательском интерфейсе. Агенты проверки [Produces(«application/json»)] , RegularExpression и другие функции служат для уточнения информации, отображаемой на создаваемой странице. Чем больше метаданных используется в коде, тем более информативной становится справочная страница пользовательского интерфейса или API.

Описание типов ответов

Разработчики, создающие высоконагруженные приложения, уделяют особое внимание выдаваемым результатам, особенно типам ответов, кодам ошибок (если они не стандартные). Для этого используются комментарии XML и DataAnnotations.

Для примера возьмем метод Create() . По умолчанию он выдает ответ «201 Created» (если элемент действительно создан) или «204 No Content» (если в тело POST не переданы данные). Однако не существует документации, которая подскажет, каким будет тот или иной ответ. Чтобы исправить ситуацию, добавим следующий фрагмент кода.

Настройка пользовательского интерфейса

Готовый пользовательский интерфейс — функциональный и удобный, но при создании страниц документации для API вы наверняка захотите использовать свой бренд или фирменный стиль.

Это можно сделать с помощью компонентов Swashbuckle. Вам нужно будет добавить ресурсы для обслуживания статических файлов, которые обычно не включаются в проект веб-API, а затем создать структуру папок для их размещения.

Добавьте к проекту пакет NuGet «Microsoft.AspNetCore.StaticFiles»: «1.0.0-*» .

Включите связующее ПО для статических файлов.

Возьмите файл index.html, который используется на странице пользовательского интерфейса Swagger, из репозитория Github _ и переместите его в папку wwwroot/swagger/ui , после чего создайте новый файл custom.css в той же папке.

Сделайте ссылку на custom.css в файле index.html.

В следующем CSS представлен образец индивидуально настроенного заголовка страницы.

Но это далеко не всё, что можно сделать со страницей. Весь перечень возможностей для пользовательского интерфейса смотрите на GitHub в репозитории Swagger UI.

Илон Маск рекомендует:  Эмуляция свойства автофокус для старых браузеров
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL