Работа с конфигурацией приложений ASP.NET
ASP.NET — Основы ASP.NET — Работа с конфигурацией приложений ASP.NET
Чтение и запись разделов конфигурации в коде
ASP.NET предоставляет класс WebConfigurationManager в пространстве имен System.Web.Configuration, который позволяет извлекать информацию из конфигурационного файла во время выполнения. Члены WebConfigurationManager перечислены ниже:
AppSettings
ConnectionStrings
Обеспечивает доступ к данным в разделе конфигурационного файла. Отдельные параметры предоставляются в виде проиндексированной по именам коллекции.
GetSection()
Возвращает объект, который содержит в себе информацию из конкретного раздела конфигурационного файла.
OpenWebConfiguration()
Возвращает редактируемый объект Configuration, который предоставляет доступ к конфигурационной информации указанного веб-приложения
OpenMachineConfiguration()
Возвращает редактируемый объект Configuration, который предоставляет доступ к конфигурационной информации, которая была указана для веб-сервера (в файле machine.config)
Используя метод WebConfigurationManager.GetSection(), можно извлекать информацию о любом другом разделе конфигурации, однако понадобится приложить дополнительные усилия. Хитрость состоит в том, что метод GetSection() возвращает объект с типом, который зависит от типа целевого раздела. Например, в случае извлечения информации из раздела это будет объект AuthenticationSection, как показано ниже:
Поиск реализован с помощью синтаксиса, похожего на синтаксис пути. Корневой элемент нe указывается, поскольку все разделы конфигурации содержатся именно в этом элементе.
Определения классов для каждого раздела конфигурации находятся в библиотеке классов внутри пространства имен System.Web.Configuration (а не System.Configuration, которое включает только классы конфигурации, общие для всех приложений .NET). Все эти классы унаследованы от ConfigurationSection.
Использование объекта ConfigurationSection позволяет извлекать немало информации о текущем состоянии приложения. Ниже приведен пример отображения с помощью этого объекта информации обо всех сборках, на которые в текущий момент ссылается приложение (используя синтаксис LINQ):
При извлечении информации с использованием метода GetSection(), он отражает совокупную конфигурацию текущего приложения. Это означает, что параметры из текущего файла web.config объединяются с теми, которые определены выше в иерархии конфигурации (например, в корневом файле web.config и в machine.config).
С помощью класса WebConfigurationManager можно также изменять большинство разделов конфигурации в коде: в действительности ASP.NET полагается на эту функциональность в административных веб-страницах. Для использования этого подхода сначала нужно вызывать метод OpenWebConfiguration() для получения объекта Configuration. Затем посредством метода Configuration.GetSection() можно извлечь раздел, предназначенный для модификации, и методом Configuration.Save() зафиксировать изменения. При изменении параметра настройки ASP.NET обрабатывает обновление безопасным образом, применяя специальный код синхронизации, который исключает возможность фиксации изменения одновременно несколькими клиентами.
Как и в случае любого конфигурационного изменения, ASP NET создает новый домен приложения с новыми параметрами, и использует его для обработки новых запросов, постепенно сворачивая работу предыдущего домена приложения.
Инструмент Website Administration Tool (WAT)
Вас наверняка интересует, зачем команде разработчиков ASP.NET понадобилось создавать такой сложный инструмент, как WebConfigurationManager, который работает слишком плохо для того, чтобы его можно было использовать в обычном веб-приложении. Причина в том, что WebConfigurationManager на самом деле не предназначен для применения в веб-страницах. Вместо этого он позволяет разработчикам создавать специальные инструменты, упрощающие конфигурирование веб-приложений.
ASP.NET даже включает графический инструмент конфигурирования, который основан полностью на WebConfigurationManager, хотя узнать об этом можно, только углубившись в код. Этот инструмент называется . Он позволяет конфигурировать различные части файла web.config с помощью интерфейса веб-страницы.
Чтобы запустить его для конфигурирования текущего приложения в Visual Studio, выберите в меню Website (Веб-сайт) (или в меню Project (Проект) в случае проектной разработки) пункт ASP.NET Configuration (Конфигурация ASP.NET). После этого Visual Studio откроет окно браузера, который автоматически аутентифицирует вас с текущей учетной записью:
WAT можно использовать для автоматизации изменений web.config, сделанных в предыдущем примере. Для этого перейдите на вкладку Application (Приложение). Эта вкладка позволяет редактировать и удалять параметры приложения (щелчком на ссылке Manage Application Settings (Управление параметрами настройки приложения)), а также создавать новые параметры (щелчком на ссылке Create Application Settings (Создание параметров настройки приложения)):
Вот так работа WAT, по сути, и выглядит: вы вносите изменения с помощью графического интерфейса (веб-страницы), a WAT «за кулисами» генерирует все необходимые параметры и добавляет их в файл web.config приложения. Конечно, в WAT также имеется ряд опций для конфигурирования более сложных параметров ASP.NET.
Расширение структуры конфигурационного файла
К счастью, в ASP.NET применяется модульная модель конфигурации с высокой степенью расширяемости, которая позволяет расширять структуру конфигурационных файлов web.config и machine.config добавлением в них собственных специальных разделов. Чтобы расширить структуру конфигурационного файла, понадобится выполнить три следующих шага:
Определите информацию, предназначенную для сохранения в конфигурационном файле, а также элементы и атрибуты, которые необходимы для ее представления. В идеальном случае на каждую группу концептуально связанных параметров должен приходиться один элемент. Атрибуты служат для хранения отдельных порций информации, ассоциированной с элементом.
Для каждого нового элемента создайте класс C#, инкапсулирующий его информацию. При запуске приложения ASP.NET будет считывать информацию из элемента в конфигурационном файле и использовать ее для создания экземпляра класса. После этого вы можете читать информацию из этого объекта всякий раз, когда в ней возникает необходимость.
Зарегистрируйте новый раздел в своем конфигурационном файле с использованием элемента . В каждый новый элемент идентифицируется и отображается на соответствующий класс.
Разобраться в том, как это работает, лучше всего на типовом примере. В последующих разделах будет показано, как создать и зарегистрировать новый элемент в файле web.config.
Создание класса раздела
Предположим, что необходимо сохранить несколько связанных параметров, которые все вместе будут указывать приложению, каким образом ему связываться с удаленным объектом. Например, эти параметры могут содержать номер порта, информацию о местонахождении сервера, URL-адрес, данные об аутентификации пользователей и т.д. Исходя из уже изученного, можно ввести их как отдельные параметры в разделе . Однако тогда ничто не будет указывать на логическую связь между этими параметрами. Это не только усложнит их чтение и интерпретацию, но может привести к возникновению проблем, если один из них обновляется, а всех остальные — нет.
Если вы хотите использовать такую структуру, то должны определить соответствующий класс, унаследовав его от System.Configuration.ConfigurationSection. Далее можно как поместить этот класс в отдельный DLL-компонент, так и добавить его исходный код в папку App_Code, чтобы он автоматически компилировался как часть текущего веб-приложения. (Если вы создаете приложение в виде веб-проекта, просто добавьте файл исходного кода в этот проект, и он будет автоматически компилироваться как часть сборки веб-приложения.)
Ниже показан подходящий для приведенного выше примера класс OrderService. Он представляет один единственный элемент и предоставляет доступ к его атрибутам через строго типизированные свойства:
Здесь видно, что каждое свойство отображается на имя соответствующего атрибута с помощью атрибута ConfigurationProperty. Эта часть кода чрезвычайно важна, поскольку определяет схему (структуру) специального раздела. Если добавить атрибут в специальный раздел, но не включить соответствующий атрибут ConfigurationProperty, то при попытке прочитать эту часть файла web.config ASP.NET сгенерирует исключение.
Атрибут ConfigurationProperty также позволяет указывать, является ли данный фрагмент информации обязательным, и какое значение должно использоваться по умолчанию, если оно не было предоставлено. В настоящих процедурах свойств код использует словарь атрибутов, который предоставляет базовый класс. Извлекать любой необходимый атрибут из этой коллекции можно по имени.
Регистрация класса раздела
После создания класса раздела никакого кода больше писать не понадобится. Однако еще остается зарегистрировать этот класс в файле web.config, чтобы среда ASP.NET могла распознать добавленные специальные параметры. Если не выполнить этот шаг, при попытке запустить приложение возникнет ошибка, потому что ASP.NET заметит в файле web.config неизвестный раздел.
Чтобы зарегистрировать свой специальный раздел, просто добавьте элемент в раздел файла web.config и укажите в нем имя раздела (с использованием атрибута name) и имя соответствующего ему класса (с помощью атрибута type).
Ниже показано содержимое файла web.config:
И, наконец, последнее, что понадобится сделать — это обеспечить извлечение в вебстранице информации из специального раздела на тех этапах, где она необходима. Для этого нужно использовать метод ConfigurationManager.GetSection():
На рисунке показано, какие данные будут отображаться:
Шифрование разделов конфигурации
ASP.NET никогда не обслуживает запросы на конфигурационные файлы, т.к. в них часто содержится секретная информация. Вдобавок к этому базовому ограничению безопасность можно дополнительно повысить за счет шифрования разделов конфигурационного файла. Это рекомендуется делать для таких данных, как детали соединений и подробности, специфичные для пользователя. (Естественно, любые пароли тоже должны быть зашифрованы, хотя в идеальном случае их вообще не следует помещать в конфигурационный файл.)
В ASP.NET поддерживаются два варианта шифрования:
RSA
Поставщик RSA позволяет создать пару ключей, которая затем будет использоваться для шифрования конфигурационных данных. Преимущество состоит в том, что ключ можно копировать между компьютерами (например, чтобы применять один и тот же конфигурационный файл со всеми серверами в веб-фабрике). Поставщик RSA используется по умолчанию.
DPAPI (data protection API — API-интерфейс защиты данных)
Поставщик DPAPI предлагает пользователю механизм зашиты, встроенный в Windows. Конфигурационные файлы шифруются с помощью ключа, специфичного для машины. Преимущество заключается в том, что управлять или поддерживать ключ не понадобится. Недостаток связан с невозможностью использования конфигурационного файла, зашифрованного с помощью этого механизма, на любом другом компьютере.
В любой из этих схем шифрование является совершенно прозрачным. Когда вы получаете параметр настройки из зашифрованного раздела, ASP.NET автоматически расшифрует его и вернет коду простой текст (при условии доступности требуемого ключа).
Точно так же, если вы модифицируете значение программно и сохраняете его, шифрование происходит автоматически. Однако вы не сможете редактировать этот раздел файла web.config вручную. Хотя вы по-прежнему можете пользоваться WAT, IIS Manager или собственным специальным кодом. При работе с API-интерфейсом конфигурации шаги шифрования и расшифровки выполняются автоматически во время чтения или записи в защищенный раздел.
Шифрование в коде
Чтобы разрешить шифрование программным путем, необходимо извлечь соответствующий объект ConfigurationSection.SectionInformation, а затем вызвать метод ProtectSection(). Любые существующие данные будут зашифрованы, и с этого момента любые производимые изменения будут шифроваться автоматически. Чтобы отключить шифрование, вызовите метод UnprotectSection().
Ниже показан пример, в котором производится шифрование раздела приложения, если он не зашифрован, или отключение шифрования, если он зашифрован:
Шифрование из командной строки
На данный момент не существует никакого графического инструментального средства для шифрования и расшифровки параметров настройки конфигурационного файла. Но если вы не хотите писать код, можете воспользоваться утилитой командной строки aspnet_regiis.exe, которая находится в каталоге c:\Windows\Microsoft.NET\Framework\[версия]. Для использования этого инструмента уже должен быть создан виртуальный каталог, чтобы настроить приложение в IIS.
При использовании утилиты aspnet_regiis для защиты части конфигурационного файла потребуется определить следующие аргументы командной строки:
переключатель -pe указывает конфигурационный раздел для шифрования;
переключатель -app указывает виртуальный путь к веб-приложению;
переключатель -prov указывает имя поставщика.
Что такое код asp hcnocompressionforproxies
ASP – веб-технология, которую в декабре 1996 года представила компания Microsoft для возможности создания интерактивных веб-приложений. ASP – это аббревиатура от Active Server Pages, что переводится, в соответствии с логикой технологии, как «активные серверные страницы». Важно понимать, что ASP не является языком программирования, она только позволяет встраивать в обычный HTML-код сценарии на каком-либо скриптовом языке(Visual Basic Script или Java Script). Таким образом, за счет использования ASP на веб-страницы могут встраиваться элементы с заранее настроенным программным управлением.
Изначально в любом текстовом редакторе создается исходный код программы. По умолчанию используется Visual Basic – если ничего дополнительно не указывать, система будет считать, что программа написана именно на этом языке. Затем файл, которому задается расширение .asp, выкладывается в каталог, имеющий права на выполнение, чтобы сервер мог исполнить этот файл, когда браузер пользователя запросит его. Для пользователя этот файл не виден, поскольку сначала загруженный файл с программой интерпретирует сервер таким образом, что программный код будет отображаться непосредственно в HTML-коде страницы, в скобках вида скобки .
ASP просуществовала в чистом виде до 2002 года. 1 января этого года увидел свет релиз ASP.NET, технологии, в которой были учтены ошибки и недочеты ASP. Устранить их получилось благодаря тому, что новая технология была основана на более функциональной платформе Microsoft .NET.
Синонимы: нет
Все термины на букву «A»
Все термины в глоссарии
Введение в ASP.NET Core¶
В данной теме представлены новые концепции в ASP.NET Core, и здесь рассказывается, как разрабатывать современные веб приложения.
Что такое ASP.NET Core?¶
ASP.NET Core — это кроссплатформенный фреймворк с открытым исходным кодом для создания современных облачных веб приложений. Приложения ASP.NET Core могут быть запущены под`.NET Core `__ или под полной версией .NET Framework. Фреймворк состоит из модульных компонентов, что дает вам гибкость при создании решений. Вы можете разрабатывать и запускать ASP.NET Core приложения под Windows, Mac и Linux. ASP.NET Core имеет открытый исходный код на GitHub.
Почему ASP.NET Core?¶
Первый предварительный релиз ASP.NET появился почти 15 лет назад как часть .NET Framework. С тех пор миллионы разработчиков использовали его для создания и запуска веб приложений, и теперь он обладает гораздо большими возможностями.
В ASP.NET Core произошло большое число архитектурных изменений, в результате чего фреймворк стал компактным и модульным. ASP.NET Core не основывается на System.Web.dll. Он основывается на наборе пакетов NuGet. Это позволяет вам оптимизировать приложение, чтобы оно включало только те пакеты NuGet, которые вам нужны.
С ASP.NET Core вы получаете следующие фундаментальные улучшения:
- Единую историю для сборки веб UI и веб API
- Интеграцию современных клиентских фреймворков и рабочих процессов разработки
- Облачную конфигурационную систему
- Встроенное внедрение зависимостей
- Новый легкий модульный поток HTTP запросов
- Возможность хостинга на IIS или хостинга в самом процессе
- Встроенный `.NET Core`_
- Конструкцию в виде пакетов `NuGet`_
- Новый инструментарий, который упрощает разработку
- Возможность кроссплатформенного запуска ASP.NET приложений под Windows, Mac и Linux
- Открытый исходный код
Анатомия приложения¶
Приложение ASP.NET Core — это просто консольное приложение, которое создает веб сервер в своем методе Main :
Microsoft.AspNetCore.Hosting.WebHostBuilder` , который следует паттерну сборки для создания хоста веб приложения. У паттерна есть методы, которые определяют веб сервер (например, UseKestrel ) и класс для запуска ( UseStartup ). В примере выше используется веб сервер Kestrel, но мы можем указать и другие серверы. В следующем разделе мы подробнее рассмотрим UseStartup . WebHostBuilder предлагает много дополнительных методов, включая UseIISIntegration для хостинга на IIS и IIS Express и UseContentRoot для указания корневой директории контента. Методы Build и Run создают IWebHost , который будет хостить приложение, и оно начнет слушать входящие HTTP запросы.
Startup¶
Метод UseStartup для WebHostBuilder указывает класс Startup для вашего приложения.
В классе Startup вы определяете поток обработки запросов, а также здесь настраиваются все сервисы, необходимые вашему приложению. Класс Startup должен быть открытым и содержать следующие методы:
- ConfigureServices определяет, используемые вашим приложением (например, ASP.NET MVC Core, Entity Framework Core, > Configure определяет связующее ПО в потоке запросов
- См. Запуск приложения
Сервисы¶
Сервис — это компонент для общего пользования в приложении. Сервисы доступны благодаря внедрению зависимостей. ASP.NET Core включает в себя встроенный IoC контейнер, который по умолчанию поддерживает внедрение конструктора, но вы можете легко заменить его IoC контейнером по вашему выбору. В дополнение к преимуществу слабого связывания, DI делает так, что сервисы доступны всему приложению. Например, везде доступно логирование . См. Внедрение зависимостей (Dependency Injection) .
Связующее ПО¶
В ASP.NET Core сы составляете поток запросов, используя Связующее ПО (Middleware) . Связующее ПО ASP.NET Core выполняет асинхронную логику для HttpContext , а затем либо вызывает следующее связующее ПО в цепочки, либо напрямую обрывает запрос. Обычно для связующего ПО используется “Use”, принимая зависимость для пакета NuGet и вызывая соответствующий метод расширения UseXYZ для IApplicationBuilder в методе Configure .
ASP.NET Core предлагает богатый набор связующего ПО:
С ASP.NET Core можно использовать любое связующее ПО, основанное на OWIN. См. Open Web Interface for .NET (OWIN) .
Серверы¶
Хостинговая модель ASP.NET Core напрямую не слушает запросы — она полагается на серверную реализацию HTTP, чтобы передавать запросы приложению. Переданный запрос представляется как набор интерфейсов feature, которые приложение затем компонует в HttpContext . ASP.NET Core включает в себя кроссплатформенный веб сервер, Kestrel , который обычно запускается за производственным веб сервером, таким как IIS или nginx.
Корневая директория контента¶
Корневая директория — это основной путь к любому контенту, используемому в приложении, например, его представления и веб контент. По умолчанию корневая директория контента — это то же самое, что и основной путь приложения для выполняемого хостинга; альтернативу можно указать с помощью WebHostBuilder .
Корневая директория веб¶
Корневая директория веб (web root) — это директория для открытых статических ресурсов, таких как файлов css, js и файлов изображений. Связующее ПО статических файлов по умолчанию отрабатывает файлы только из этой директории (и поддиректорий). Путем директории является /wwwroot , но вы можете указать и другой путь с помощью WebHostBuilder .
почему не работает такой код? 
притом не просто не работает. а вешает ИИС сервер.
смысл задачи. сгенерировать в теле ХТМЛ документа JavaScript функцию которая пробегает по всем записям из базы (которые отображаются в таблице и таблицы имеют ID для управления её свойствами GAZ1_rs(«K_DP»)) но я так понял с выполнением тегов АСП внутри тегов жаваскрипта недопустимо или типа того.
подскажите что можно сделать?
Почему такой код не работает?
for n=0 to 30 dim strSQL strSQL=’INSERT INTO tblTest (test_name) VALUES (» & n & »)’ &.
Кто знает, почему не работает такой SQL-запрос? Всегда пустой рекордсет.
У меня в asp-странице идет запрос к БД, такого рода. ‘SELECT ALL * FROM tbl_price WHERE name.
Почему один и тот-же код в WindowsForms работает, а в Web не работает?
Здравствуйте, подскажите почему один и тот-же код в WindowsForms работает, а в Web не работает.
Почему данный код не работает?
Я вообще-то по жизни писал на Васике, а тут приспичило разобраться с АСП. По ходу, если сохранить.
Почему этот код не работает?
Делаю вот что (часть кода): . Dim ) . 26
22.05.2012, 12:34 | |||||||||||||||||
22.05.2012, 12:45 | 5 | ||||||||||||||||
Ты все правильно сделал в своем примере. Только надо GAZ1_rs.MoveNext из условия вынести, у тебя ASP просто зациклился и поэтому IIS зависает. |
|||||||||||||||||
22.05.2012, 13:24 | 6 | ||||||||||||||||
Ты все правильно сделал в своем примере. Только надо GAZ1_rs.MoveNext из условия вынести, у тебя ASP просто зациклился и поэтому IIS зависает. эм. уже разобрался спасибо. может предложите какие-нить координальные меры по построению меню. может заменить на какой-нить типа RSDN-овского меню. но у них там XML а не с БД данные для меню берутся. + нельзя у них дать возможность от уровня доступа только к суб-меню. (т.е. меню урезается до подуровня) |
|||||||||||||||||
22.05.2012, 14:44 | 7 | ||||||||||||||||
22.05.2012, 14:51 | 8 | ||||||||||||||||
а каким образом мне осуществить снятие bgColor с выбраное дотого ячейки. есть пример посторения дерева на рсдн-е. но там хмл. чесно разбираться даже просто времени нет. но возможно именно этот пример и придётся каким-то образом переписывать под мои данные. |
|||||||||||||||||
22.05.2012, 14:52 | 9 | ||||||||||||||||
прочитав 3 топика (это ж надо уметь — одну проблему растянуть на 3 топика) понял в чем дело bazile прав, глобальную переменную в javascripte, запоминающую последний id подсвеченной таблицы, и ненужно огромного количества java кода. |
|||||||||||||||||
22.05.2012, 14:55 | 10 | ||||||||||||||||
Ничего удивительного. JavaScript интерпретируемый язык, обращение к DOM модели тоже вещь медленная. В данном случае я бы попробовал вместо ручной генерации кода JavaScript получить сразу весь список элементов у которых надо изменить цвет и проходить по нему. Думаю что выйдет хорошее ускорение.
|
Полезные вещички |
HTML (учебник) |
Web (веб) статьи |
Раскрутка |
Web-мастеру |
Программы |
Рассылка |
|
Что такое ASP? По сути ASP — это обычные текстовые файлы (обычно с расширением имени asp), содержащие конструкции языка HTML и сценарии, написанные на языках JScript и/или VBScript, выполняющиеся на сервере наряду с обычным HTML-кодом. Чем же хороша технология ASP? Прежде всего, возможностью исполнять сценарии на сервере. С помощью сценариев для сервера можно получить доступ к файлам, базам данных и другим ресурсам, хранимым на сервере, а также к централизованным ресурсам сервера, таким как электронная почта или факс-служба. Функционирование в непротиворечивой и управляемой среде — еще одно преимущество выполнения сценариев на сервере. Ваш код выполняется только на одной версии единственного сервера, а не на множестве версий множества браузеров. Тем самым достигается так называемая кросс-платформенная совместимость. Сценарии, расположенные в страницах ASP, могут быть не только серверными, но и клиентскими. Серверные сценарии выделяются специальным образом и исполняются на сервере, в то время как клиентские сценарии загружаются вместе с HTML-страницей на компьютер пользователя и работают под управлением браузера, не имея возможности выполнять какие-либо деструктивные функции на стороне клиента. Новый год детям |