Распространенные различия в конфигурации между средами разработки и производства (C#)
В предыдущих руководствах мы развернули наш веб-сайт, скопировав все соответствующие файлы из среды разработки в рабочую среду. Однако нередко возникают различия в конфигурации между средами, что требует, чтобы каждая среда была уникальным файлом Web.config. В этом руководстве рассматриваются типичные различия конфигурации и рассматриваются стратегии для поддержки отдельных сведений о конфигурации.
Введение
В последних двух руководствах описывается развертывание простого веб-приложения. В руководстве По развертыванию сайта с помощью FTP-клиента показано, как использовать автономный FTP-клиент для копирования необходимых файлов из среды разработки в рабочую среду. В предыдущем руководстве Развертывание сайта с помощью Visual Studio мы рассмотрели развертывание с помощью средства Копирования веб-сайта Visual Studio и параметра Опубликовать. В обоих руководствах каждый файл в рабочей среде был копией файла в среде разработки. Однако нередко файлы конфигурации в рабочей среде отличаются от файлов в среде разработки. Конфигурация веб-приложения хранится в Web.config
файле и обычно содержит сведения о внешних ресурсах, таких как база данных, веб-серверы и серверы электронной почты. В ней также описывается поведение приложения в определенных ситуациях, например при возникновении необработанного исключения.
При развертывании веб-приложения важно, чтобы правильные сведения о конфигурации были в рабочей среде. В большинстве случаев Web.config
файл в среде разработки не может быть скопирован в рабочую среду "как есть". Вместо этого настраиваемую версию Web.config
необходимо передать в рабочую среду. В этом руководстве кратко рассматриваются некоторые из наиболее распространенных различий конфигурации. В нем также приведены некоторые методы для поддержания различных сведений о конфигурации между средами.
Типичные различия конфигурации между средами разработки и рабочей средой
Файл Web.config
содержит различные сведения о конфигурации для ASP.NET приложения. Некоторые из этих сведений о конфигурации одинаковы независимо от среды. Например, параметры проверки подлинности и правила авторизации URL-адресов, которые изложены в Web.config
элементах и <authorization>
файла<authentication>
, обычно одинаковы независимо от среды. Но другие сведения о конфигурации, такие как сведения о внешних ресурсах, обычно различаются в зависимости от среды.
Строки подключений к базе данных — это простой пример сведений о конфигурации, которые отличаются в зависимости от среды. Когда веб-приложение взаимодействует с сервером базы данных, оно должно сначала установить подключение, и это достигается с помощью строка подключения. Хотя можно жестко запрограммировать строка подключения базы данных непосредственно на веб-страницах или в коде, который подключается к базе данных, лучше разместить его Web.config
<connectionStrings>
элемент так, чтобы строка подключения сведения были в едином централизованном расположении. Часто во время разработки используется другая база данных, чем в рабочей среде; Следовательно, сведения о строка подключения должны быть уникальными для каждой среды.
Примечание
В будущих руководствах рассматривается развертывание приложений, управляемых данными. После этого мы рассмотрим особенности хранения строк подключения к базе данных в файле конфигурации.
Предполагаемое поведение среды разработки и рабочей среды существенно отличается. Веб-приложение в среде разработки создается, тестируется и отлаживается небольшой группой разработчиков. В рабочей среде это же приложение посещает множество одновременных пользователей. ASP.NET включает ряд функций, которые помогают разработчикам в тестировании и отладке приложения, но эти функции должны быть отключены по соображениям производительности и безопасности в рабочей среде. Рассмотрим несколько таких параметров конфигурации.
Параметры конфигурации, влияющие на производительность
При первом посещении страницы ASP.NET (или в первый раз после ее изменения) декларативная разметка должна быть преобразована в класс, и этот класс должен быть скомпилирован. Если веб-приложение использует автоматическую компиляцию, необходимо также скомпилировать класс кода программной части страницы. Вы можете настроить набор параметров компиляции Web.config
с помощью элемента файла<compilation>
.
Атрибут debug является одним из наиболее важных атрибутов в элементе <compilation>
. debug
Если атрибут имеет значение true, то скомпилированные сборки включают отладочные символы, необходимые при отладке приложения в Visual Studio. Но символы отладки увеличивают размер сборки и предъявляют дополнительные требования к памяти при выполнении кода. Кроме того, если для атрибута debug
задано значение true, любое содержимое, возвращаемое методом WebResource.axd
, не кэшируется. Это означает, что каждый раз, когда пользователь посещает страницу, ей потребуется повторно скачивать статическое содержимое, возвращаемое WebResource.axd
.
Примечание
WebResource.axd
— это встроенный обработчик HTTP, представленный в ASP.NET 2.0, который серверные элементы управления используют для извлечения внедренных ресурсов, таких как файлы скриптов, изображения, CSS-файлы и другое содержимое. Дополнительные сведения о том, как WebResource.axd
работает и как его можно использовать для доступа к внедренным ресурсам из пользовательских серверных элементов управления, см. в разделе Доступ к внедренным ресурсам по URL-адресу с помощью WebResource.axd
.
Атрибуту <compilation>
элемента debug
обычно присваивается значение true в среде разработки. Для отладки веб-приложения этому атрибуту необходимо присвоить значение true. Если вы попытаетесь выполнить отладку приложения ASP.NET из Visual Studio и debug
для атрибута задано значение false, Visual Studio отобразит сообщение о том, что приложение не может быть отлажено до тех пор, пока для атрибута debug
не будет задано значение true, и предложит внести это изменение.
В рабочей среде атрибут никогда неdebug
должен иметь значение true из-за его влияния на производительность. Более подробное обсуждение этой темы см. в записи блога Скотта Гатри: Не запускать рабочие ASP.NET приложения с debug="true"
включенным.
Пользовательские ошибки и трассировка
Когда в приложении ASP.NET возникает необработанное исключение, оно перенаправляемо в среду выполнения, после чего происходит одно из трех действий:
- Отобразится общее сообщение об ошибке среды выполнения. Эта страница информирует пользователя о том, что произошла ошибка среды выполнения, но не предоставляет никаких сведений об этой ошибке.
- Отобразится сообщение со сведениями об исключении, которое содержит сведения о только что созданном исключении.
- Откроется пользовательская страница ошибок, которая представляет собой созданную вами ASP.NET страницу с любым сообщением.
То, что происходит перед необработанным исключением, зависит Web.config
от раздела файла<customErrors>
.
При разработке и тестировании приложения полезно просматривать сведения о любом исключении в браузере. Однако отображение сведений об исключении в приложении в рабочей среде представляет собой потенциальную угрозу безопасности. Кроме того, это нелестный и делает ваш сайт выглядеть непрофессионально. В идеале в случае необработанного исключения веб-приложение в среде разработки будет отображать сведения об исключении, в то время как то же приложение в рабочей среде будет отображать пользовательскую страницу ошибок.
Примечание
Параметр раздела по умолчанию <customErrors>
отображает сообщение со сведениями об исключении только при посещении страницы через localhost, в противном случае — универсальную страницу ошибки среды выполнения. Это не идеальный вариант, но необходимо знать, что поведение по умолчанию не раскрывает сведения об исключении для посетителей, не являющихся местными. В следующем руководстве <customErrors>
этот раздел рассматривается более подробно и показано, как отображать пользовательскую страницу ошибок при возникновении ошибки в рабочей среде.
Еще одна ASP.NET функция, полезная во время разработки, — трассировка. Трассировка, если она включена Trace.axd
, записывает сведения о каждом входящем запросе и предоставляет специальную веб-страницу для просмотра сведений о последних запросах. Вы можете включить и настроить трассировку с помощью <trace>
элемента в Web.config
.
Если вы включите трассировку, убедитесь, что она отключена в рабочей среде. Так как данные трассировки включают файлы cookie, данные сеанса и другие потенциально конфиденциальные сведения, важно отключить трассировку в рабочей среде. Хорошей новостью является то, что по умолчанию трассировка отключена Trace.axd
, а файл доступен только через localhost. При изменении этих параметров по умолчанию в разработке убедитесь, что они отключены в рабочей среде.
Методы обслуживания отдельных сведений о конфигурации
Наличие различных параметров конфигурации в среде разработки и рабочей среде усложняет процесс развертывания. В предыдущих двух руководствах процесс развертывания включал копирование всех необходимых файлов из среды разработки в рабочую среду, но этот подход работает только в том случае, если сведения о конфигурации одинаковы в обеих средах. Существует множество методов развертывания приложения с различными сведениями о конфигурации. Давайте каталогим некоторые из этих вариантов для размещенных веб-приложений.
Развертывание файла конфигурации рабочей среды вручную
Самый простой подход заключается в Web.config
обслуживании двух версий файла: одна для среды разработки и одна для рабочей среды. Развертывание сайта в рабочей среде влечет за собой копирование всех файлов на рабочий сервер в среде разработкиWeb.config
, за исключением файла. Вместо этого файл рабочей Web.config
среды будет скопирован в рабочую среду.
Этот подход не очень сложный, но его легко реализовать, так как сведения о конфигурации меняются редко. Он лучше всего подходит для приложений с небольшой группой разработчиков, которые размещаются на одном веб-сервере и сведения о конфигурации которых редко изменяются. Это наиболее эффективно при развертывании файлов приложения вручную с помощью изолированного FTP-клиента. При использовании средства копирования веб-сайта или публикации Visual Studio необходимо сначала заменить файл, зависящий Web.config
от развертывания, на файл, зависящий от рабочей среды, перед развертыванием, а затем переключить его обратно после завершения развертывания.
Изменение конфигурации во время сборки или развертывания
В ходе обсуждений до сих пор предполагается нерегламентированный процесс сборки и развертывания. Многие крупные программные проекты имеют более формализованные процессы, использующие средства с открытым кодом, собственные или сторонние инструменты. Для таких проектов, скорее всего, можно настроить процесс сборки или развертывания, чтобы соответствующим образом изменить сведения о конфигурации перед их отправкой в рабочую среду. При сборке веб-приложения с помощью MSBuild, NAnt или другого средства сборки, скорее всего, можно добавить шаг сборки, чтобы изменить Web.config
файл, включив в него параметры, относящиеся к рабочей среде. Или рабочий процесс развертывания может программно подключиться к серверу управления версиями и получить соответствующий Web.config
файл.
Фактический подход к получению соответствующих сведений о конфигурации в рабочей среде сильно зависит от инструментов и рабочего процесса. Таким образом, мы не будем углубляться в эту тему дальше. Если вы используете популярное средство сборки, например MSBuild или NAnt, вы можете найти статьи и руководства по развертыванию, относящиеся к этим средствам, с помощью поиска в Интернете.
Управление различиями конфигурации с помощью проекта веб-развертывания Add-In
В 2006 году корпорация Майкрософт выпустила проект веб-разработки Add-In для Visual Studio 2005. Add-In для Visual Studio 2008 был выпущен в 2008 году. Эта Add-In позволяет разработчикам ASP.NET создать отдельный проект веб-развертывания вместе с проектом веб-приложения, который при сборке явно компилирует веб-приложение и копирует файлы для развертывания в локальный выходной каталог. Проект веб-приложения использует MSBuild в фоновом режиме.
По умолчанию файл среды разработки Web.config
копируется в выходной каталог, но вы можете настроить проект веб-развертывания для настройки
сведения о конфигурации, которые копируются в этот каталог следующими способами:
- С помощью
Web.config
замены раздела файла, в котором необходимо указать раздел для замены и XML-файл, содержащий замещающий текст. - Путем предоставления пути к внешнему исходному файлу конфигурации. Если выбран этот параметр, проект веб-развертывания копирует определенный
Web.config
файл в выходной каталог (а неWeb.config
файл, используемый в среде разработки). - Путем добавления настраиваемых правил в файл MSBuild, используемый проектом веб-развертывания.
Чтобы развернуть веб-приложение, создайте проект веб-развертывания, а затем скопируйте файлы из папки выходных данных проекта в рабочую среду.
Дополнительные сведения об использовании проекта веб-развертывания проверка в этой статье о проектах веб-развертывания из апрельского выпуска журнала MSDN Magazine за апрель 2007 года или по ссылкам в разделе Дополнительные сведения в конце этого руководства.
Примечание
Проект веб-развертывания нельзя использовать вместе с Visual Web Developer, так как проект веб-развертывания реализован как Add-In Visual Studio, а выпуски Visual Studio Express (включая Visual Web Developer) не поддерживают надстройки.
Сводка
Внешние ресурсы и поведение веб-приложения в разработке обычно отличаются от того, когда одно и то же приложение находится в рабочей среде. Например, строки подключения к базе данных, параметры компиляции и поведение при возникновении необработанного исключения обычно различаются в разных средах. Эти различия должны учитываться в процессе развертывания. Как мы обсуждали в этом руководстве, самый простой подход — вручную скопировать альтернативный файл конфигурации в рабочую среду. Более элегантные решения можно использовать при использовании проекта веб-развертывания Add-In или с более формализованным процессом сборки или развертывания, который может вместить такие настройки.
Счастливое программирование!
Дополнительные материалы
Дополнительные сведения по темам, рассматриваемым в этом руководстве, см. в следующих ресурсах:
- Пояснения о строках подключения
- Строки подключения к базе данных @ ConnectionStrings.com
- Не запускать рабочие ASP.NET приложения с включенным
debug="true"
- Корректное реагирование на необработанное исключение — отображение User-Friendly страниц ошибок
- Параметры конфигурации ключей при развертывании базы данных.
- Проекты | веб-развертывания VS 2008Выпущена поддержка проекта веб-развертывания VS 2008
- Проекты веб-развертываний