2.Jeff Prosise. Programming Microsoft .NET (core reference) – Microsoft Press, 2002.
3.Дубовцев А. В. Microsoft .NET в подлиннике. – СПб.: БХВ-Петербург, 2004.
4.Рихтер Дж. Программирование на платформе Microsoft .NET Framework. – М.: Русская редакция, 2002.
[1] Произносится как «дот-нэт».
[2] Данные требования не продиктованы исполняющей средой, но заложены в компиляторы языков для .NET.
[3] Если бы создавался только один объект, соответствующий атрибуту, то изменение данных в нем отразилось бы на всех запросах к атрибуту.
[4] В C# 2.0 поддержка перебора реализуется при помощи итераторов.
[5] Попытка работать с несуществующим элементом генерирует исключение ArgumentOutOfRangeException.
[6] Данное правило можно обойти при помощи файла конфигурации сборки.
[7] Метод Load() имеет несколько перегруженных версий.
[8] Описание типа BindingFlags смотрите в параграфе, посвященном механизму отражения.
[9] В Java имеется сходная технология – Remote Method Invocation (RMI).
[10] Понятие форматера встречалось при рассмотрении сериализации в .NET Framework.
[11] Вид активации определяется настройкой инфраструктуры Remoting, а не типом. Следовательно, объекты одного типа могут иметь различную активацию в разных приложениях.
[12] Структура System.TimeSpan служит для представления временных интервалов. Время хранится с точностью до 100 наносекунд.
[13] Диспетчер лицензий находится на сервере.
[14] Диспетчер проверяет таблицу каждые 10 секунд. Однако время опроса можно изменить. В следующем фрагменте кода периодичность опроса устанавливается равной 5 минутам:
[15] Использование в качестве сервера консольного приложения – не лучшее решение. В примере таким образом мы поступаем исключительно для простоты.
[16] Класс System.Exception реализует интерфейс ISerializable. Если создается класс для пользовательской исключительной ситуации, то этот класс должен быть помечен атрибутом [Serializable], а также включать конструктор следующего вида:
Если класс для исключительной ситуации добавляет к базовому классу ApplicationException какие-либо поля, требуется программно записать эти поля в поток сериализации. Для этого переписывается метод GetObjectData() и поля добавляются в объект SerializationInfo как показано в следующем примере (обратите внимание на пустые перегруженные конструкторы):
[Serializable]
public class ExampleEx: ApplicationException {
public ExampleEx(): base() { }
public ExampleEx(string message): base(message) { }
public ExampleEx(string message,Exception inner):base(message,inner){}
Записанные поля доступны в конструкторе исключительной ситуации (параметр info). Методы класса SerializationInfo, такие как GetValue() или, например, GetString() позволяют прочесть их.
[17] Инфраструктура Remoting создает на сервера для каждого типа с клиентской активацией SAO-объект, публикуемый по адресу http://<hostname>:<port>/<AppName>/RemoteActivationService.rem. Этот SAO-объект принимает запросы клиентов, создает CAO-объекты на сервере и передает ссылки на созданные объекты клиентам.
[18] Настройка на стороне сервера не является обязательной, так как HTTP-канал на сервере автоматически использует два форматера и выбирает подходящий в зависимости от настроек клиента.
[19] Если клиент использует объекты с клиентской активации более чем с одного сервера, требуется указать в конфигурационном файле несколько секций <client>.
[20] Возможно программное подключение провайдеров, однако этот способ в лекциях не рассматривается.
[21] Что обрабатывается – сообщение или поток – зависит от места канального приемника в цепочке: до форматера или после него.
[22] Имена приведенных классов не точны. Точное имя специфично для поставщика. Так, поставщик данных для SQL Server содержит классы SqlConnection, SqlCommand, SqlDataReader, SqlDataAdapter.
[23] Указаны типы данных, применяемые в Microsoft SQL Server 2000.
[24] Следует учитывать, что пул существует в рамках одного домена. Разные домены приложения имеют разные пулы.
[25] Более точно, вначале производится поиск соответствия с учетом регистра, если соответствие не найдено – повторный поиск без учета регистра.
[26] С помощью метода ридера GetName() можно узнать имя конкретного столбца, указав его номер. Метод GetDataTypeName() принимает целое число, соответствующее порядковому номеру столбца, и возвращает в строковом представлении тип данных этого столбца.
[27] Это имеет смысл в том случае, если выполняется команда, которая комбинирует несколько SQL-операторов. Например, команда с таким текстом:
SELECT * FROM Disks;
DELETE FROM Disks WHERE id = '1'
[28] Для поставщика MS SQL Server таблица с описанием содержит следующие столбцы: ColumnName, ColumnOrdinal, ColumnSize, NumericPrecision, NumericScale, IsUnique, IsKey, BaseServerName, BaseCatalogName, BaseColumnName, BaseSchemaName, BaseTableName, DataType, AllowDBNull, ProviderType, IsAliased, IsExpression, IsIdentity, IsAutoIncrement, IsRowVersion, IsHidden, IsLong, IsReadOnly. За более подробной информацией обратитесть к справке по .NET Framework.
[29] В MS SQL Server при помощи конструкции RETURN можно вернуть из хранимой процедуры только значения целого типа. Для возврата значений других типов следует использовать output-параметры.
[30] В данном параграфе нас будет интересовать только команда для выборки данных.
[31] Существует перегруженная версия метода Fill() для заполнения одной таблицы (вне набора):
DataTable dt = new DataTable();
da.Fill(dt);
[32] При занесении информации в таблицу при помощи адаптера автоматически настраиваются следующие свойства: AllowDBNull, Caption, ColumnName, DataType, Ordinal, Table, Unique.
[33] Класс System.DBNull соответствует понятию NULL в реляционных БД и имеет единственное статическое поле только для чтения Value.
[34] Для столбцов с автоприращением можно принудительно указать произвольное целочисленное значение при занесении информации в строку таблицы.
[35] Это значение получено из базы.
[36] Метод Compute() не позволяет вычислять агрегатные значения на основе нескольких столбцов.
[37] Как и в случае с использованием свойства Expression класса DataColumn, для подробного ознакомления с синтаксисом построения выражений отсылаем заинтересованных читателей к справке MSDN.
[38] Подробный состав параметров утилиты xsd.exe изучите самостоятельно.
[39] Классическим примером является типичный Интернет-магазин. Если пользователь на странице определяет некое условие фильтрации, то браузер должен отобразить список товаров, имеющихся в данный момент в магазине и удовлетворяющих фильтру. Естественно, подобный процесс подразумевает динамическую генерацию страницы с результатами на стороне сервера.
[40] Если свойство страницы IsPostBack = false, то страница отображается в первый раз.
[41] В данном контексте понятия «дочерний» и «родительский» следует понимать так: родительский элемент является контейнером для своих дочерних элементов.
[42] Не устанавливайте свойства ControlToCompare и ValueToCompare одновременно. В противном случае, преймущество имеет свойство ControlToCompare.
[43] Для того, чтобы установить или извлечь несколько выбранных элементов, используется булево свойство Selected отдельного объекта ListItem.
[44] Элементы управления Repeater, DataList, DataGrid будут рассмотрены в отдельном параграфе.
[45] Данный сценарий находится в главном каталоге .NET.
[46] Методы аутентификации ASP.NET применяются для файлов, являющихся частью Web-приложения. HTML-страницы (*.htm или *.html) не включаются в число этих файлов автоматически. Такие страницы обрабатываются IIS, а не ASP.NET. Чтобы зарегистрировать HTML-страницы для обработки рабочим процессом ASP.NET, требуется соответствующим образом настроить IIS.