При
создании приложений ASP.NET используются
несколько разделов, не связанных
непосредственно с Microsoft ASP.NET.
Таких разделов четыре, и каждый из них
служит для настройки различных
пространств имен .NET. Ниже приведено их
описание.
-
<system.diagnostics>.
Содержит информацию о пространстве
имен System.Diagnostics, включая
параметры, связанные с трассировкой
и переключателями.
-
<system.net>.
Содержит разделы, связанные с
параметрами прокси, а также
параметры, относящиеся к
аутентификации и веб-запросам.
-
<system.runtime.remoting>.
Содержит параметры для .NET Remoting,
включая каналы и клиентские
провайдеры. В лекции приведено
описание этих параметров, а также
способы добавления собственных
каналов и провайдеров.
-
<system.windows.forms>.
Содержит один параметр, связанный с
JIT-компиляцией (Just in Time – во
время выполнения).
Изучение раздела <system.diagnostics>
Группа
разделов <system.diagnostics>
содержит параметры для настройки
трассировки и отладки при помощи
объектов трассировки
System.Diagnostics. Не следует
путать трассировку
System.Diagnostics с объектом
трассировки ASP.NET. Объект трассировки
ASP.NET используется в ASP.NET и
настраивается в разделе
<trace>
группы разделов <system.web>.
Объекты трассировки и отладки из
пространства имен
System.Diagnostics используются
как ASP.NET, так и консольными
приложениями.
Пример
из практики. Единственной
причиной, по которой в приложениях
ASP.NET используется объект
трассировки
System.Diagnostics, является
потребность в сохранении
трассировочной информации при
развертывании приложения в удаленном
журнале событий или базе данных.
Если приложение развертывается вами
только на своих собственных серверах,
для трассировки приложения лучше
использовать метод
Page.Trace.
В
группе <system.diagnostics>
содержится несколько разделов, и каждый
из них настраивает отдельную часть
трассировки или отладки. Имея эти
разделы в своих настроечных файлах, вы
получаете возможность внесения изменений
в способ хранения трассировочной
информации без перекомпиляции приложения.
Работа
с разделом <trace>
Раздел
<trace>
используется для настройки приемников
трассировки. Приемники трассировки
– это объекты, которые принимают и
сохраняют трассировочную информацию,
передаваемую приложением. Имеется
несколько приемников, которые направляют
эту информацию в различные хранилища,
включая приемники, передающие ее в
текстовый файл или в журнал событий.
Свойства раздела
<trace> приведены в табл. 6.1.
Таблица 6.1. Свойства <trace>
Свойство |
Описание |
autoflush |
Определяет
автоматический сброс
содержимого трассировки
приемником трассировки
каждый раз при записи
информации в объект
трассировки.
true
Вывод трассировки
сбрасывается автоматически.
false
Вывод трассировки не
сбрасывается автоматически –
для сброса требуется вызов
метода
Trace.Flush. |
indentsize |
Определяет
количество пробелов для
создания отступов текста
трассировки при вызове
метода
Trace.Indent. |
Ниже
показан пример раздела
<trace>.
<system.diagnostics>
<trace autoflush="true" indentsize="2" />
</system.diagnostics>
В этом
примере трассировочная информация
автоматически сбрасывается после каждой
записи.
Использование подраздела <listeners>
Подраздел
<listeners> – это раздел,
основанный на коллекции, то есть в него
можно добавлять или удалять приемники
трассировки. Он позволяет изменять место
отправки трассировочной информации без
изменения кода и перекомпилирования
приложения. Ниже приведен синтаксис
подраздела
<listeners>.
<trace>
<listeners>
<add name="ListenerName" type="ListenerClass"
initializeData="option" />
<remove name="ListenerName" />
</listeners>
</trace>
В
таблице 6.2 приведен перечень свойств
элемента <add>.
Таблица 6.2. Свойства <add>
Свойство |
Описание |
name |
Определяет
имя приемника. |
type |
Определяет
имя класса, версию, культуру
и открытый ключ класса
приемника. |
initializeData |
Определяет
параметр, передаваемый в
класс приемника при его
инициализации. |
Ниже
показан пример добавления приемника
трассировки в раздел
<listeners>.
<trace autoflush="false" indent="2">
<listeners>
<add name="CustomListener"
type="System.Diagnostics.EventLogTraceListener"
initializeData="EventLogName" />
</listener>
</trace>
В
примере добавляется приемник трассировки
с именем
CustomListener, который
записывает весь текст из объекта
трассировки, а затем сохраняет
информацию в журнале событий с именем
EventLogName.
Работа
с разделом <switches>
Раздел
<switches>
служит для добавления в приложение
переключателей трассировки.
Переключатель – это параметр,
считываемый из кода, который определяет,
должна ли записываться трассировочная
информация, и если должна, то какая.
Поскольку код читает значения
переключателей из настроечного файла,
можно модифицировать значения
переключателей в настроечном файле без
необходимости в изменении кода или
перекомпиляции приложения. Ниже
приведены определения двух типов
переключателей.
-
Логические переключатели.
Принимают значение
1 или
0; они
определяют необходимость в записи
чего-либо.
-
Переключатели трассировки.
Содержат параметры, определяющие
различные уровни трассировочной
информации.
Оба
типа переключателей одинаковым образом
добавляются в раздел
<switches>.
Ниже приведен синтаксис добавления
переключателя в раздел
<switches>.
<system.diagnostics>
<switches>
<add name="SwitchName" value="SwitchValue" />
</switches>
</system.diagnostics>
Свойства элемента
<add> перечислены в табл. 6.3.
Таблица 6.3. Свойства <add>
Свойство |
Описание |
name |
Определяет
имя переключателя в коде для
указания на этот
переключатель. |
value |
Определяет
значение, используемое для
определения типа выводимой
трассировочной информации. |
Использование логических переключателей
Логические переключатели служат для
определения того, требуется ли
записывать трассировочную информацию.
Значение логического переключателя
устанавливается в 1 или в 0 (true
или false
соответственно). Ниже показан пример
добавления логического переключателя в
раздел <switches>.
<switches>
<add name="TraceInfo" value="1" />
</switches>
Данный
переключатель может быть прочитан в
вашем приложении с помощью следующего
кода.
C#
static BooleanSwitch bSwitch = new
BooleanSwitch("TraceInfo",
"Write Trace Information");
if(bSwitch.Enabled == true)
{
Trace.WriteLine("Database Connection Opened");
}
VB.NET
Dim
bSwitch As New
BooleanSwitch("TraceInfo", _
"Write Trace Information")
If bSwitch.Enabled = True Then
Trace.WriteLine("Database Connection Opened")
End If
Если
значение переключателя установлено в 1,
выполнится метод
Trace.WriteLine и запишется
трассировочная информация. Если значение
переключателя установлено в 0,
трассировочная информация не будет
записана.
Использование переключателей трассировки
Переключатели трассировки более гибки,
чем логические переключатели. Логические
переключатели могут только принимать
значения true
и false, а
переключатели трассировки принимают
несколько различных значений. Таблица
6.4 содержит список возможных значений
переключателя трассировки.
Таблица 6.4. Значения
переключателя трассировки
Значение |
Уровень |
Описание
трассировки |
0 |
Off |
Трассировочная информация не
записывается. |
1 |
Error |
Записываются
только сообщения об ошибках.
|
2 |
Warning |
Записываются
только сообщения об ошибках
и предупреждения.
|
3 |
Info |
Записываются
сообщения об ошибках,
предупреждения и
информационные сообщения. |
4 |
Verbose |
Записываются
все сообщения. |
Ниже
показано, как добавлять переключатель
трассировки в раздел
<switches>.
<switches>
<add name="TraceLevel" value="3" />
</switches>
Затем
переключатель можно прочитать в
приложении с помощью следующего кода.
C#
TraceSwitch tSwitch =
new TraceSwitch("TraceLevel", "Tracing Level");
Trace.WriteLineIf(tSwitch.TraceWarning,
"Here is a warning message");
Trace.WriteLineIf(tSwitch.TraceError,
"Here is a error message");
VB.NET
Dim
tSwitch As New
TraceSwitch("TraceLevel", "Tracing
Level")
Trace.WriteLineIf(tSwitch.TraceWarning,
"Here is a warning message")
Trace.WriteLineIf(tSwitch.TraceError,
"Here is a error message")
Если
переключатель
TraceLevel установлен в значение
1, то в приемник трассировки будет
записано только первое сообщение. Если
переключатель
TraceLevel установлен в значение
2, то в приемник трассировки будут
записаны оба сообщения.
Работа
с разделом <assert>
В
разделе <assert>
настраиваются события, происходящие при
вызове методов
Trace.Fail или
Debug.Assert.
По умолчанию открывается окно, выводящее
сообщение об ошибке и стек трассировки.
Выполнение приложения приостанавливается,
и у вас появляется возможность
прекратить его выполнение совсем,
повторить данную операцию либо
игнорировать ошибку. Это полезно при
отладке приложения, но данную функцию
следует отключить перед отправкой
приложения пользователям. Это можно
сделать в разделе
<assert>, а также сохранить
информацию в текстовый файл. Ниже
приведен синтаксис раздела
<assert>.
<system.diagnostics>
<assert assertuienabled="true | false" logfilename="file path" />
</system.diagnostics>
В
таблице 6.5 показан перечень свойств
элемента <assert>.
Таблица 6.5. Свойства <assert>
Свойство |
Описание |
assertuienabled |
Определяет
отображение окна с
трассировочным сообщением.
true
Окно отображается.
false
Окно не отображается. |
logfilename |
Определяет
путь к текстовому файлу, в
котором сохраняется
информация об ошибках.
Используется вне зависимости
от установки
assertuienabled в
true
или
false. |
Ниже
приведен пример раздела
<assert>.
<system.diagnostics>
<assert assertuienabled="false"
logfilename="c:\application\tracelog.txt" />
</system.diagnostics>
Используя этот пример, вы можете
подавить вывод окна отладки и задать
вывод текста в текстовый файл
c:\application\tracelog.txt.
Ключевые моменты <system.diagnostics>
Группа
разделов <system.diagnostics>
предоставляет настроечные параметры,
которые модифицируют поведение
трассировки без необходимости в
изменении кода или перекомпиляции
приложения.
-
Раздел
<trace> и подраздел
<listeners>
позволяют указать новые приемники
трассировки, сохраняющие информацию
в базах данных, текстовых файлах или
журналах событий.
- В
разделе
<switches> добавляются новые
логические или трассировочные
переключатели, задающие передачу
конкретной информации в приемник
трассировки или ее игнорирование.
-
Раздел
<assert> управляет
отображением окна отладки и записью
информации в текстовый файл.
Изучение группы <system.net>
Группа
разделов <system.net>
содержит разделы для настройки
параметров, относящихся к пространству
имен System.Net,
включая модули аутентификации,
управление соединениями, параметры
прокси-сервера и модули запросов
интернет. Далее описываются следующие
разделы.
-
<authenticationModules>.
Служит для добавления и удаления
модулей аутентификации, используемых
для аутентификации запросов
интернета.
-
<connectionManagement>.
Позволяет настраивать максимальное
количество соединений с хостами
интернета.
-
<defaultProxy>.
Позволяет настраивать прокси-сервер,
используемый для запросов HTTP.
-
<settings>.
Служит для настройки дополнительных
параметров.
-
<webRequestModules>.
Служит для настройки модулей,
которые используются для запроса
информации с хостов интернета.
Работа
с разделом <authenticationModules>
Раздел
<authenticationModules>
– это раздел, основанный на коллекции, в
которую можно добавлять модули
аутентификации, удалять их из нее и
полностью очищать коллекцию. Модули
аутентификации выполняют аутентификацию
для доступа к защищенным ресурсам. Ниже
приведен синтаксис добавления в
коллекцию модуля аутентификации.
<system.net>
<authenticationModules>
<add type="Module Class" />
</authenticationModules>
</system.net>
Свойство type
указывает на класс модуля аутентификации.
Ниже показан пример добавления модулей
аутентификации в коллекцию.
<authenticationModules>
<add type="System.Net.DigestClient, System, Version=1.0.5000.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<add type="System.Net.BasicClient, System, Version=1.0.5000.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</authenticationModules>
Добавление в коллекцию двух модулей
делает эти два типа аутентификации
доступными при выполнении запросов к
защищенным ресурсам. Вы также можете
удалить модули, ранее добавленные в
коллекцию, используя элемент
<remove> и
указав в свойстве
type удаляемый модуль.
<authenticationModules>
<remove type="System.Net.DigestClient, System,
Version=1.0.5000.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089" />
</authenticationModules>
Метод
аутентификации
digest при выполнении запросов
теперь не доступен. Используйте метод
<clear />
для удаления всех модулей, ранее
добавленных в коллекцию.
Работа
с разделом <connectionManagement>
Раздел
<connectionManagement>
указывает максимальное количество
соединений с конкретным сайтом. Он
основан на коллекции, то есть в него
можно добавлять параметры, удалять их и
полностью очищать коллекцию. Ниже
приведен синтаксис для указания
максимального количества соединений для
конкретного сервера.
<system.net>
<connectionManagement>
<add name="IP or DNS name"
maxconnection="number of connections" />
</connectionManagement>
</system.net>
В
таблице 6.6 содержится перечень свойств
элемента <add>.
Таблица 6.6. Свойства <add>
Свойство |
Описание |
name |
Определяет
IP-адрес или DNS-имя сервера.
Для указания всех серверов,
которые еще не указаны явным
образом в коллекции,
используется символ
подстановки "*". |
maxconnection |
Определяет
максимальное количество
соединений, которое может
быть установлено с
конкретным сервером. |
Ниже
показан пример использования элемента
<add>.
<system.net>
<connectionManagement>
<add name="192.168.0.1" maxconnection="4" />
<add name="www.microsoft.com" maxconnection="5" />
<add name="*" maxconnection="2" />
</connectionManagement>
</system.net>
В
примере максимальное количество
соединений для сервера, расположенного
по адресу 192.168.0.1, равно четырем, а
максимальное количество соединений для
www.microsoft.com – пяти. Все остальные
серверы ограничены двумя соединениями.
Вы можете удалить спецификацию сервера,
используя элемент
<remove>.
<system.net>
<connectionManagement>
<remove name="www.microsoft.com" />
</connectionManagement>
</system.net>
Используйте элемент
<clear />
для удаления всех ранее добавленных
ограничений на соединения.
Работа
с разделом <defaultProxy>
В
разделе <defaultProxy>
настраивается использование
прокси-сервера и адрес сервера,
применяемого для веб-запросов. Здесь
также имеются элементы и параметры, с
помощью которых задается тип запросов,
отправляемых через прокси.
Использование элемента <proxy>
Элемент <proxy>
указывает используемый прокси и его
применение для локальных запросов. Ниже
приведен синтаксис элемента
<proxy>.
<system.net>
<defaultProxy>
<proxy usersystemdefault="true | false" bypassonlocal=
"true | false" proxyaddress="URI or IP of proxy
server" />
</defaultProxy>
</system.net>
В
таблице 6.7 содержится перечень свойств
элемента <proxy>.
Таблица 6.7. Свойства <proxy>
Свойство |
Описание |
usersystemdefault |
Определяет
использование прокси для
веб-запросов.
true
Используется прокси системы
по умолчанию.
false
Прокси системы по умолчанию
не используется.
|
bypassonlocal |
Определяет,
следует ли обходить прокси
при доступе к локальным
ресурсам.
true
Прокси-сервер для локальных
запросов не используется.
false
Прокси-сервер для локальных
запросов используется.
|
proxyaddress |
Определяет
URI или IP-адрес
прокси-сервера. |
Ниже
показан пример элемента
<proxy>.
<system.net>
<defaultProxy>
<proxy usersystemdefault="false" bypassonlocal="true"
proxyaddress="192.168.0.2" />
</defaultProxy>
</system.net>
Если
создан веб-запрос, и в свойстве proxy
этого веб-запроса прокси не указан, то
используется прокси, заданный здесь. В
примере при адресации запроса не
локальному ресурсу, для которого прокси
не используется, прокси располагается по
адресу 192.168.0.2.
Использование элемента <bypasslist>
Элемент <bypasslist>
указывает любое количество регулярных
выражений для определения того, должен
ли для запроса использоваться прокси.
Если запрошенный URI или IP совпадает с
одним из регулярных выражений из этой
коллекции, то для этого запроса прокси
не используется. Элемент
<bypasslist>
основан на коллекции, то есть в него
можно добавлять элементы, удалять их и
полностью очищать коллекцию. Ниже
приведен синтаксис элемента
<bypasslist>.
<system.net>
<defaultProxy>
<bypasslist>
<add address="regular expression" />
</bypasslist>
</defaultProxy>
</system.net>
Для
любого запроса, URL которого совпадает с
выражением, указанным в свойстве
address,
прокси-сервер использоваться не будет,
например:
<system.net>
<defaultProxy>
<bypasslist>
<add address="192\.168\..*" />
<add address="[a-z]+\.microsoft\.com" />
</bypasslist>
</defaultProxy>
</system.net>
Для
любого запроса, соответствующего этим
выражениям, прокси-сервер использоваться
не будет.
Использование элемента <module>
Элемент <module>
определяет пользовательский HTTP-прокси,
используемый вместо прокси по умолчанию.
Прокси по умолчанию –
System.Net.WebProxy. Ниже приведен
синтаксис элемента
<module>
для указания прокси.
<system.net>
<defaultProxy>
<module type="Proxy Class" />
</defaultProxy>
</system.net>
Свойство type
указывает на класс, который будет
выступать в качестве HTTP-прокси. Ниже
показан пример объявления собственного
класса прокси.
<system.net>
<defaultProxy>
<module type="System.Net.WebProxy, System,
Version=1.0.5000.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089"
/>
</defaultProxy>
</system.net>
Работа
с разделом <settings>
Раздел
<settings>
содержит несколько вспомогательных
параметров, относящихся к различным
компонентам System.NET. Что касается его
создания, вам придется потратить немало
времени в поисках какой-либо
документации, несмотря на то, что он
содержит очень полезные параметры.
Использование элемента <httpWebRequest>
Элемент <httpWebRequest>
устанавливает максимальный размер
заголовка ответа, допустимый для
веб-запроса. Ниже приведен пример того,
как ограничить длину заголовка ответа с
помощью элемента
<httpWebRequest>.
<system.net>
<settings>
<httpWebRequest maximumResponseHeadersLength="128" />
</settings>
</system.net>
Свойство
maximumResponseHeadersLength
ограничивает максимальное количество
килобайтов, используемое для заголовка
ответа.
Использование элемента <ipv6>
Элемент <ipv6>
включает или отключает адресацию по
протоколу Internet Protocol версии 6.
Internet Protocol версии 6 – это новый
стандарт, который заменяет старый
Internet Protocol версии 4.
Дополнительная
информация. Internet Protocol
версии 4 – это стандартная,
привычная нам всем адресация: 4
числа, разделенных точками, например
192.168.1.1. Internet Protocol
версии 6 представляет 128-битную
адресацию, определяющую больший
диапазон адресов, а также
расширенные возможности
маршрутизации. Пример IPv6-адреса
выглядит так:
3FFE:FFFF:7654:FEDA:1245:BA98:3210:4562
Можно
включить адресацию IPv6, сначала
убедившись, что ваша операционная
система работает с адресами IPv6. В
настоящий момент такими системами
являются Microsoft Windows Server 2003,
Microsoft Windows XP (с установленным
SP1) и Microsoft Windows CE .NET. Вторым
шагом к использованию адресации IPv6
является включение ее в файле
machine.config
вашего сервера. Ниже показан пример
включения адресации IPv6 на сервере.
<system.net>
<settings>
<ipv6 enabled="true" />
</settings>
</system.net>
Включение IPv6 не отключает IPv4.
Работа
с разделом <webRequestModules>
Этот
раздел регистрирует модули веб-запросов,
обрабатывающие веб-запросы к конкретным
типам ресурсов. По умолчанию
зарегистрированы модули для запросов с
префиксами http://, https:// и file://.
В этом разделе можно переопределить
данные модули, а также зарегистрировать
новые. Он основан на коллекции, то есть
к нему можно добавлять модули, удалять
их и полностью очищать коллекцию. Ниже
приведен синтаксис добавления модуля в
раздел <webRequestModules>.
<system.net>
<webRequestModules>
<add prefix="request prefix" type="module class" />
</webRequestModules>
</system.net>
В
таблице 6.8 содержится перечень свойств
элемента <add>.
Таблица 6.8. Свойства <add>
Свойство |
Описание |
prefix |
Определяет
префикс запроса, для
которого используется этот
модуль, например http, https
или file. |
type |
Определяет
класс модуля, обрабатывающий
запрос. |
Ниже
показан пример добавления в раздел
модуля HTTP.
<system.net>
<webRequestModules>
<add prefix="http" type=
"System.Net.HttpRequestCreator, System,
Version=1.0.5000.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089"
/>
</webRequestModules>
</system.net>
Для
удаления ранее добавленного модуля
используется элемент
<remove>.
Так следует удалять из раздела модуль
HTTP.
<system.net>
<webRequestModules>
<remove name="http" />
</webRequestModules>
</system.net>
Аналогично другим разделам, основанным
на коллекциях, с помощью элемента
<clear />
удаляются все ранее добавленные модули.
Ключевые моменты <system.net>
Группа
разделов <system.net>
содержит очень полезные разделы,
относящиеся к подключению к другим
ресурсам.
-
Раздел <authenticationModules>
позволяет добавлять или удалять
модули аутентификации, используемые
при доступе к ресурсам в System.NET.
-
Раздел <connectionManagement>
позволяет указать максимальное
количество подключений к серверу,
используя регулярные выражения,
которые определяют IP-адрес или имя
DNS сервера.
-
Раздел <defaultProxy>
позволяет настраивать новый
прокси-сервер.
-
Раздел <webRequestModules>
позволяет настраивать модули,
используемые для запроса информации
с удаленных ресурсов.
Изучение группы <system.runtime.remoting>
Группа
<system.runtime.remoting>
содержит большое количество разделов и
элементов для настройки
remoting (удаленного
взаимодействия). В этом параграфе
рассказывается о том, как использовать
этот раздел настроек.
Совет.
Для работы с данными параметрами и
их изменения применяется также
инструмент .NET Configuration. Этот
инструмент описывается в приложении
A.
Мы
познакомимся со следующими разделами.
-
<application>.
Объявляет удаленные объекты,
используемые приложением, и объекты,
предоставляемые приложением.
-
<channels>.
Содержит шаблоны каналов.
-
<channelSinkProviders>.
Содержит провайдеров приемников
каналов, используемых в цепочке
приемников канала.
-
<debug>.
Позволяет потребовать от системы
remoting загрузки всех типов
remoting при запуске приложения, что
облегчает перехват ошибок,
возникающих в настроечном файле.
Замечание.
Имеется несколько элементов, которые
можно использовать в нескольких
разделах. Чтобы избежать
дублирования информации в книге, я
буду последовательно описывать
разделы, а затем ссылаться на
объяснения в других разделах,
использующих этот же элемент.
Работа
с разделом <application>
Раздел
<application>
содержит большое количество подразделов,
которые определяют удаленные объекты,
предоставляемые и используемые
приложением. Прежде чем перейти к другим
разделам, опишем свойство name раздела
<application>.
Это свойство указывает имя приложения,
используемое для URL активации. При
размещении приложения при помощи IIS это
свойство использовать нельзя.
Дополнительная
информация. URL активации – это
URL, используемый для доступа к
удаленному объекту. Его синтаксис
включает протокол, имя компьютера,
порт и имя приложения; имеет вид
protocol//:computername:port/applicationname.
Ниже
приведен синтаксис свойства
name.
<system.runtime.remoting>
<application name="applicationName" />
</system.runtime.remoting>
Указанное здесь имя приложения
используется в активационном URL.
В
разделе
<application> имеется несколько
подразделов.
-
<channels>.
Определяет каналы для взаимодействия
с удаленными объектами.
-
<client>.
Определяет объекты, используемые
приложением.
-
<lifetime>.
Служит для настройки времени жизни
всех удаленных объектов данного
приложения.
-
<service>.
Определяет объекты, предоставляемые
приложением.
-
<soapInterop>.
Определяет тип соответствий для
SOAP.
Использование раздела <channels>
Этот
раздел настраивает каналы, используемые
приложением для взаимодействия с
удаленными объектами. В разделе можно
настроить шаблоны указания каналов, а
также объявить новые каналы.
Единственный раздел, включенный в него,
называется
<channel>.
Использование раздела
<channel>.
Раздел <channel>
настраивает канал, который ссылается на
шаблон канала, либо новый канал. Ниже
приведен синтаксис для объявления нового
канала.
<application>
<channels>
<channel type="Channel Type, Channel Assembly"
displayName="Name" port="Port"
customChannelProperty="Property Value" />
</channels>
</application>
Ниже
показан синтаксис объявления канала,
который ссылается на шаблон канала.
<application>
<channels>
<channel ref="Channel Reference" displayName="Name"
port="Port" />
</channels>
</application>
Свойства обоих методов объявления
перечислены в табл. 6.9.
Таблица 6.9. Свойства <channel>
Свойство |
Описание |
ref |
Определяет ID
шаблона, используемого
каналом. При указании
данного свойства свойство
type
не указывается. |
displayName |
Определяет
имя, под которым .NET
Framework Configuration Tool
будет использовать этот
канал. Для других целей
данное свойство не
используется. |
type |
Определяет
полное имя типа канала и имя
сборки, в которой
расположена реализация
канала. |
port |
Определяет
порт, используемый каналом.
Некоторые шаблоны каналов
уже включают спецификацию
порта, но другие требуют его
явного указания. |
customChannelProperty |
Определяет
собственное свойство канала.
Для каждого канала может
быть создано любое
количество таких свойств. |
При
объявлении ваших каналов воспользуйтесь
подразделами <clientProviders>
и <serverProviders>.
Они аналогичны подразделам из раздела
<channels>
раздела <system.runtime.remoting>.
За дополнительной информацией обратитесь
к параграфу "Работа с разделом
<channels>"
далее в лекции.
Использование раздела <client>
Раздел
<client>
служит для указания объектов,
используемых данным приложением. Ниже
приведен синтаксис для объявления
объекта.
<application>
<client url="object url" displayName="name" />
</application>
Свойства раздела
<client> перечислены в табл.
6.10.
Таблица 6.10. Свойства <client>
Свойство |
Описание |
url |
Определяет
URL данного объекта.
Требуется для объектов,
активизируемых клиентом, но
необязателен для объектов,
активизируемых сервером. |
displayName |
Используется
в .NET Framework
Configuration Tool для
предоставления списка
клиентов. Для других целей
не используется. |
Раздел
<client>
содержит также элементы
<wellknown>
и <activated>.
Использование элемента
<wellknown>.
Раздел <wellknown>
позволяет указывать информацию об
общеизвестных объектах, активизируемых
сервером. Ниже приведен его синтаксис.
<application>
<client>
<wellknown url="URL" displayName="Name"
type="Type, Assembly" />
</client>
</application>
Свойства раздела
<wellknown> перечислены в табл.
6.11.
Таблица 6.11. Свойства <wellknown>
Свойство |
Описание |
url |
Определяет
полный URL для типа, включая
URI для объекта. |
displayName |
Определяет
имя, используемое при
создании списка клиентов в
.NET Framework Configuration
Tool. |
type |
Определяет
полное имя типа объекта и
имя сборки. |
Использование элемента <activated>.
Элемент
<activated> предоставляет
информацию об объектах, активизируемых
клиентом. Если используется элемент
<activated>,
то элемент
<client> должен содержать
свойство URL. Ниже приведен синтаксис
элемента
<activated>.
<application>
<client>
<activated type="Remote Type, Remote Assembly" />
</client>
</application>
Свойство type
указывает на полное имя типа и сборку,
которая содержит реализацию этого типа.
Использование раздела <lifetime>
Раздел
<lifetime>
определяет время жизни удаленных
объектов. Все значения в этом разделе
задаются числом, за которым следует
единица измерения:
D – дни,
H – часы,
M – минуты,
S –
секунды и MS
– миллисекунды. Единицей измерения по
умолчанию являются секунды. Ниже
приведен синтаксис раздела
<lifetime>.
<application>
<lifetime leaseTime="time" sponsorshipTimeout="time√
renewOnCallTime="time" leaseManagerPollTime="time" />
</application>
В
таблице 6.12 содержится перечень свойств
раздела
<lifetime>.
Таблица 6.12. Свойства
<lifetime>
Свойство |
Описание |
leaseTime |
Определяет
период времени действия
лицензии для приложения. |
sponsorshipTimeout |
Определяет
количество времени, в
течение которого менеджер
лицензий ожидает ответа
спонсора на уведомление об
истечении срока действия
лицензии. Если ответ не
поступает, сборщик мусора
удаляет удаленный объект из
памяти. Значение по
умолчанию – 2 минуты. |
renewOnCallTime |
Определяет
количество времени, на
которое продлевается
действие лицензии при каждом
использовании объекта.
Значение по умолчанию – 2
минуты. |
leaseManagerPollTime |
Определяет
количество времени, через
которое менеджер лицензий
выполняет проверку истечения
времени действия лицензии.
Значение по умолчанию – 10
секунд. |
Ниже
показан пример раздела
<lifetime>.
<application>
<lifetime leaseTime="10M" sponsorshipTimeout="2M"
renewOnCallTime="3M" leaseManagerPollTime="15S" />
</application>
Изменение установленного здесь времени
позволяет оптимизировать время поддержки
в работоспособном состоянии объектов
вашего приложения в зависимости от их
использования.
Использование раздела <service>
Этот
раздел позволяет определять объекты,
предоставляемые данным приложением. Он
включает элементы
<wellknown> и
<activated>.
Хотя эти элементы имеют такие же имена,
что и элементы из раздела
<clients>,
они не точно такие же.
Использование элемента
<wellknown>.
Элемент <wellknown>
определяет информацию об объектах,
активизируемых сервером, которые
предоставляются через данное приложение.
Синтаксис элемента
<wellknown>
имеет следующий вид.
<application>
<service>
<wellknown mode="Singleton | SingleCall" displayName="name"
type="Type, Assembly" objectUri="objectUri" />
</service>
</application>
Свойства элемента
<wellknown> перечислены в табл.
6.13.
Таблица 6.13. Свойства <wellknown>
Свойство |
Описание |
displayname |
Определяет
имя, по которому .NET
Framework Configuration Tool
ссылается на данный канал. |
mode |
Определяет
тип объекта –
Singleton или
SingleCall. |
type |
Определяет
полное имя типа и имя сборки
объекта. |
objectUri |
Определяет
конечную точку URI данного
объекта. |
Использование элемента
<activated>.
Элемент
<activated> указывает информацию
об объектах, активизируемых клиентом,
которые предоставляются приложением
клиенту. Ниже приведен синтаксис
элемента
<activated>.
<application>
<service>
<activated type="Type, Assembly" />
</service>
</application>
Свойство type
определяет полное имя типа и имя сборки
этого объекта.
Использование раздела <soapInterop>
Раздел
<soapInterop>
содержит подразделы, в которых
объявляются соответствия типов,
используемые в SOAP.
-
<preLoad>.
Определяет загружаемый тип CLR для
соответствия, которое расширяет
класс
SoapAttribute. Он может
присутствовать в данном разделе
несколько раз.
-
<interopXmlElement>.
Определяет двунаправленное
соответствие между типом CLR и
элементом и пространством имен XML.
-
<interopXmlType>.
Определяет двунаправленное
соответствие между типом CLR и
элементом и пространством имен XML.
Используется тогда, когда имя
элемента не может быть изменено.
Использование элемента
<preLoad>.
Элемент <preLoad>
используется для указания соответствия
типов, расширяющих класс
SoapAttribute.
Ниже приведен синтаксис этого элемента.
<application>
<soapInterop>
<preLoad type="type to load" assembly="assembly to load" />
</soapInterop>
</application>
Свойства элемента приведены в табл.
6.14.
Таблица 6.14. Свойства <preLoad>
Свойство |
Описание |
type |
Определяет
тип, загружаемый для
десериализации. Должно
включать полную информацию о
своем местонахождении в
сборке. |
assembly |
Определяет,
что из данной сборки должны
быть предварительно
загружены все типы. |
Использование элемента
<interopXmlElement>.
Элемент <interopXmlElement>
может создавать двунаправленное
соответствие между типом CLR и элементом
и пространством имен XML. Ниже приведен
его синтаксис.
<application>
<soapInterop>
<interopXmlElement clr="TypeName, AssemblyName"
xml="XML Element, XML Namespace" />
</soapInterop>
</application>
Свойства этого элемента приведены в табл.
6.15.
Таблица 6.15. Свойства <interopXmlElement>
Свойство |
Описание |
clr |
Определяет
тип и сборку, которые нужно
поставить в соответствие
элементу и пространству имен
XML. |
xml |
Определяет
элемент и пространство имен
XML, которые соответствуют
типу и сборке. |
Использование элемента
<interopXmlType>.
Этот элемент позволяет задавать
соответствие типа и сборки CLR и типа и
пространства имен XML. Ниже приведен его
синтаксис.
<application>
<soapInterop>
<interopXmlType clr="Type Name, Assembly Name"
xml="XML Type Name, Type Namespace" />
</soapInterop>
</application>
В
таблице 6.16 содержится перечень свойств
этого элемента.
Таблица 6.16. Свойства <interopXmlType>
Свойство |
Описание
|
clr |
Определяет
полное имя типа и сборки,
которые нужно поставить в
соответствие элементу и
пространству имен XML.
|
xml |
Определяет
имя типа и пространство имен
XML, которые соответствуют
указанным выше типу и сборке. |
Работа
с разделом <channels>
Раздел
<channels>
объявляет шаблоны каналов, которые
используются при объявлении каналов в
разделе
<application>. Единственный
раздел, содержащийся в этом разделе,
называется
<channel>. Каждый раздел
<channel>
– это отдельный шаблон канала.
Использование раздела <channel>
Ниже
показан синтаксис раздела
<channel>.
<channels>
<channel id="Channel ID" type="Channel Type, Channel Assembly"
displayName="Name" customChannelProperty="Value"
delayLoadAsClientChannel="true | false" />
</channels>
В
таблице 6.17 содержится перечень свойств
раздела <channel>.
Таблица 6.17. Свойства <channel>
Свойство |
Описание |
id |
Определяет
строку, используемую для
ссылки на данный шаблон при
объявлении канала. |
type |
Определяет
полный тип и имя сборки
данного объекта. |
displayName |
Определяет
имя, используемое в .NET
Framework Configuration
Tool. |
customChannelProperty |
Определяет
собственное свойство канала. |
delayLoadAsClientChannel |
Определяет
загрузку канала при
отсутствии регистрации
канала клиентом.
true
Канал будет загружен во
время выполнения.
false
Канал загружен не будет.
|
Два
подраздела этого раздела называются
<serverProviders>
и <clientProviders>.
-
<clientProviders>. Содержит
провайдеров приемников каналов,
которые используются в цепочке
вызовов клиентских приемников канала
по умолчанию.
-
<serverProviders>.
Содержит провайдеров приемников
каналов, которые используются в
цепочке вызовов серверных приемников
канала по умолчанию.
Оба
раздела используют элементы
<formatter>
и <provider>.
Использование элемента
<formatter>.
Элемент
<formatter> определяет провайдера
приемника канала для приемника-форматера,
который будет вставлен в цепочку
приемников канала. Ниже приведен
синтаксис элемента
<formatter>.
<formatter ref="Formatter Template
ID" type="FormatterSinkType,
FormatterAssembly" customFormatterProperty="customProperty"
includeVersions="true | false" strictBinding="true | false"
typeFilterLevel="Low | High" />
В
таблице 6.18 содержится перечень свойств
этого раздела.
Таблица 6.18. Свойства
<formatter>
Свойство |
Описание |
ref |
Определяет ID
используемого шаблона
провайдера
приемника-форматера. |
type |
Определяет
полное имя типа и имя сборки,
содержащей реализацию
провайдера. |
customFormatterProperty |
Определяет
собственное свойство
форматера. |
includeVersions |
Определяет,
включает ли отправляющий
форматер полную информацию о
типе и версии сборки.
true
Полная информация о типе и
сборки включается.
false
Полная информация о типе и
сборки не включается. |
strictBinding |
Определяет,
будет ли принимающий
форматер использовать полную
информацию о версии, или он
будет полагаться только на
имя типа и сборки.
true
Принимающий форматер
использует полную информацию
о версии.
false
Принимающий форматер не
использует полную информацию
о версии. |
typeFilterLevel |
Определяет
уровень автоматической
десериализации, используемой
форматером. |
Использование элемента
<provider>.
Элемент
<provider> определяет провайдера
приемника канала для приемника канала,
который будет вставлен в цепочку
приемников канала. Ниже приведен
синтаксис элемента
<provider>.
<provider ref="Provider Template ID"
type="Provider Type,
Provider Assembly" customChannelSinkProperty="customProperty" />
В
таблице 6.19 содержится перечень свойств
<provider>.
Таблица 6.19. Свойства
<provider>
Свойство |
Описание |
ref |
Определяет ID
шаблона провайдера. |
type |
Определяет
полное имя типа и имя сборки,
содержащей реализацию
провайдера. |
customChannelSinkProperty |
Определяет
собственное свойство
приемника канала. |
Работа
с разделом <channelSinkProviders>
Раздел
<channelSinkProviders>
создает клиентские и серверные шаблоны
провайдеров приемников канала. Эти
шаблоны могут использоваться из любого
раздела, который регистрирует провайдера
приемника канала. Ниже приведен
синтаксис раздела
<channelSinkProviders>.
<channelSinkProviders>
<serverProviders />
<clientProviders />
</channelSinkProviders>
В
раздел <channelSinkProviders>
включаются два дополнительных раздела.
-
<clientProviders>.
Содержит шаблоны приемников каналов,
которые будут использоваться в
цепочке вызовов клиентских
приемников канала по умолчанию.
-
<serverProviders>.
Содержит шаблоны приемников каналов,
которые будут использоваться в
цепочке вызовов серверных приемников
канала по умолчанию.
Разделы <serverProviders>
и <clientProviders>
используют элементы
<formatter>
и <provider>.
Эти элементы объявляют шаблоны
приемников канала, не создавая
экземпляров приемников канала.
Использование элемента <formatter>
Элемент
<formatter> объявляет новый
шаблон форматера, который может
использоваться в других разделах
<formatter>.
Ниже приведен синтаксис элемента
<formatter>.
<formatter id="Formatter ID"
type="Formatter Type,
Formatter Assembly" customFormatterProperty="customProperty"
includeVersions="true | false" strictBinding="true | false"
typeFilterLevel="Low | Full" />
В
таблице 6.20 содержится перечень свойств
элемента
<formatter>.
Таблица 6.20. Свойства
<formatter>
Свойство |
Описание |
id |
Определяет
строку, которая
идентифицирует данный шаблон. |
type |
Определяет
полное имя типа и имя сборки,
которая содержит реализацию
провайдера. |
customFormatterProperty |
Определяет
собственное свойство
приемника канала. |
includeVersions |
Указывает,
что отправляющий форматер
включает полную информацию о
типе и версии сборки. |
strictBinding |
Определяет,
будет ли принимающий
форматер идентифицировать
тип с помощью полной
информации о версии типа. |
typeFilterLevel |
Определяет
уровень автоматической
десериализации, шаблоном
канала. |
Использование элемента <provider>
Элемент
<provider> объявляет новый шаблон
провайдера, который может использоваться
в других разделах
<provider>. Ниже приведен
синтаксис элемента
<provider>.
<provider id="Provider ID"
type="Provider Type, Provider
Assembly"
customChannelSinkProperty="custom property" />
В
таблице 6.21 содержится перечень свойств
элемента
<provider>.
Таблица 6.21. Свойства
<provider>
Свойство |
Описание |
id |
Определяет
строку, используемую для
ссылки на данный шаблон. |
type |
Определяет
полное имя типа и имя сборки. |
customChannelSinkProperty |
Определяет
собственное свойство канала. |
Работа
с разделом <debug>
Раздел
<debug>
содержит только одно свойство. Свойство
loadTypes
определяет, должны ли при запуске
приложения загружаться все типы,
указанные в настроечном файле. Это очень
полезно, так как позволяет быстро
увидеть, что все эти типы могут быть
загружены. Ошибка при написании не
вызовет проблем при работе, так как
будет перехвачена при запуске приложения.
Ниже приведен синтаксис для установки
этого свойства.
<system.runtime.remoting>
<debug loadTypes="true | false" />
</system.runtime.remoting>
При
установке этого свойства в значение
true при
запуске приложения будут загружены все
типы. Хотя это очень полезно при отладке
и разработке приложения, перед
развертыванием своего приложения
убедитесь, что свойство установлено в
значение false.
Оно устанавливается только в файле
machine.config
или настроечном файле приложения.
Ключевые моменты <system.runtime.remoting>
-
Раздел
<channels> позволяет
создавать и настраивать шаблоны
каналов, используемые другими
разделами.
-
Раздел <channelSinkProviders>
позволяет создавать и настраивать
шаблоны провайдеров приемников
канала.
-
Раздел
<application> позволяет
настраивать различные опции
удаленного доступа своего приложения,
включая добавление каналов и
провайдеров приемников канала.
-
Раздел
<debug> используется для того,
чтобы при запуске приложения
потребовать загрузку всех типов
remoting.
Изучение группы <system.windows.forms>
Группа
<system.windows.forms>
содержит единственное свойство. Это
свойство устанавливается только в файле
machine.config
или настроечном файле приложения. Оно
применяется только к приложениям,
использующим формы Windows. Это свойство
– jitDebugging
– включает или отключает JIT-отладку.
JIT-отладка позволяет установленному
отладчику реагировать на любые
необработанные исключения. По умолчанию
при установке
jitDebugging в значение
false
формы Windows будут отображать окно с
кнопками Continue, Quit и Details (Продолжить,
Выход, Сведения). При включении
jitDebugging
исключение обрабатывается установленным
отладчиком. Ниже приведен синтаксис для
установки значения
jitDebugging.
<system.windows.forms
jitDebugging="true | false" />
Это
свойство может быть установлено только в
файле
machine.config или настроечном
файле отдельного приложения.
Ключевые моменты
-
Группа разделов
<system.diagnostics>
предоставляет различные параметры,
используемые для настройки
трассировки и отладки.
-
Группа разделов
<system.net>
содержит параметры для настройки
того, как производится
аутентификация веб-запросов и как
для них используется прокси-сервер.
-
Группа разделов
<system.runtime.remoting>
позволяет настраивать параметры
remoting для приложения. Вы также
можете изменить эти параметры с
помощью.NET Framework Configuration
Tool.
-
Группа разделов
<system.windows.forms>
содержит единственный параметр,
который управляет JIT-отладкой.
|