В начале года получил код dreamspark H4RQ9-QJ6FD-YJWJT-P6FVF-HGXQZ. При его вводе- сообщение что он просрочен.
|
Изучение архитектуры настроек ASP.NET
Данный обработчик проверяет, имеется ли свойство file=", а затем, если это свойство пустое, возвращает значение, основанное на вызове метода NameValueSectionHandler.CreateStatic(). Это метод, создающий объект конфигурации. Ниже приведен код NameValueSectionHandler.
//———————————————————————————––––––––––––—————— // <copyright file="NameValueSectionHandler.cs" company="Microsoft"> // // Copyright (c) 2002 Microsoft Corporation All rights reserved. // The use and distribution terms for this software are contained in the // file named license.txt, which can be found in the root of this // distribution. By using this software in any fashion, you are agreeing // to be bound by the terms of this license // You must not remove this notice, or any other, from this software. // // </copyright> //——————————––––––––––––——————————————————————— #if !LIB namespace System.Configuration { using System.Collections; using System.Collections.Specialized; using System.Xml; using System.Globalization; public class NameValueSectionHandler : IConfigurationSectionHandler { const string defaultKeyAttribute = "key"; const string defaultValueAttribute = "value"; public object Create(object parent, object context, XmlNode section) { return CreateStatic(parent, section, KeyAttributeName, ValueAttributeName); } internal static object CreateStatic(object parent, XmlNode section) { return CreateStatic(parent, section, defaultKeyAttribute, defaultValueAttribute); } internal static object CreateStatic(object parent, XmlNode section, string keyAttriuteName, string valueAttributeName) { ReadOnlyNameValueCollection result; // start result off as a shallow clone of the parent if (parent == null) result = new ReadOnlyNameValueCollection(new CaseInsensitiveHashCodeProvider( CultureInfo.InvariantCulture), new CaseInsensitiveComparer( CultureInfo.InvariantCulture)); else { ReadOnlyNameValueCollection parentCollection = (ReadOnlyNameValueCollection)parent; result = new ReadOnlyNameValueCollection(parentCollection); } // process XML HandlerBase.CheckForUnrecognizedAttributes(section); foreach (XmlNode child in section.ChildNodes) { // skip whitespace and comments if (HandlerBase.IsIgnorableAlsoCheckForNonElement( child)) continue; // handle <set>, <remove>, <clear> tags if (child.Name == "add") { String key = HandlerBase.RemoveRequiredAttribute( child, keyAttriuteName); String value = HandlerBase.RemoveRequiredAttribute( child, valueAttributeName, true /*allowEmptyString*/); HandlerBase.CheckForUnrecognizedAttributes(child); result[key] = value; } else if (child.Name == "remove") { String key = HandlerBase.RemoveRequiredAttribute( child, keyAttriuteName); HandlerBase.CheckForUnrecognizedAttributes(child); result.Remove(key); } else if (child.Name.Equals("clear")) { HandlerBase.CheckForUnrecognizedAttributes(child); result.Clear(); } else { HandlerBase.ThrowUnrecognizedElement(child); } } result.SetReadOnly(); return result; } protected virtual string KeyAttributeName { get { return defaultKeyAttribute;} } protected virtual string ValueAttributeName { get { return defaultValueAttribute;} } } } #endif
Данный код создает объект коллекции настроек, содержащий пары различных ключей и значений из раздела настроек <appSettings>. Я не буду тратить много времени на объяснение кода обработчика, но давайте рассмотрим несколько наиболее важных пар. Метод CreateStatic() вызывается из первого обработчика раздела и создает объект конфигурации ReadOnlyNameValueCollection, который будет хранить всю информацию о парах различных ключей и значений. Давайте посмотрим на код, который используется для разбора XML.
if (child.Name == "add") { String key = HandlerBase.RemoveRequiredAttribute(child, keyAttriuteName); String value = HandlerBase.RemoveRequiredAttribute(child, valueAttributeName, true/*allowEmptyString*/); HandlerBase.CheckForUnrecognizedAttributes(child); result[key] = value; }
Если имя дочернего элемента XML равно " add ", то этот код добавляет в объект типа ReadOnlyNameValueCollection с именем result пару ключ/значение. Когда вы в своем коде ссылаетесь на коллекцию <appSettings>, то осуществляете доступ к этой коллекции и обращаетесь к значениям, сохраненным в этом разделе.
Обработчики разделов настроек интерпретируют все параметры из конкретных разделов и делают их доступными для приложений. В "Создание собственных параметров" описывется, как создавать собственные обработчики разделов настроек для интерпретации параметров из собственных разделов.
Ключевые моменты
- Иерархическая модель настроек организует различные виды наследования от сервера к приложению и от одного приложения к другому. Это наследование основано на URL, который используется для доступа к требуемому ресурсу.
- Для указания того, что настроечные параметры относятся к конкретной директории или даже одному файлу, используется тег location.
- Для запрета переопределение параметров другими файлами web.config используется параметр allowOverride.
- Обработчики разделов настроек делают настройки конфигурации доступными для приложений, обрабатывая XML и возвращая объект конфигурации.