Развертывание веб-приложения ASP.NET с SQL Server Compact с помощью Visual Studio или Visual Web Developer: устранение неполадок (12 из 12)

Том Дайкстра

Скачать начальный проект

В этой серии учебников показано, как развернуть (опубликовать) проект веб-приложения ASP.NET, включающий базу данных SQL Server Compact, с помощью версии-кандидата Visual Studio 2012 или Visual Studio Express 2012 RC for Web. Вы также можете использовать Visual Studio 2010 при установке обновления веб-публикации. Общие сведения о серии см. в первом руководстве этой серии.

Руководство по функциям развертывания, появившиеся после выпуска версии-кандидата Visual Studio 2012, развертывание SQL Server выпусков, отличных от SQL Server Compact, и развертывание на веб-сайтах Windows Azure см. в статье ASP.NET веб-развертывание с помощью Visual Studio.

На этой странице описаны некоторые распространенные проблемы, которые могут возникнуть при развертывании веб-приложения ASP.NET с помощью Visual Studio. Для каждой из них предоставляются одна или несколько возможных причин и соответствующие решения.

Ошибка сервера в приложении "/" — текущие пользовательские параметры ошибок предотвращают удаленный просмотр сведений об ошибке

Сценарий

После развертывания сайта на удаленном узле вы получите сообщение об ошибке, в котором упоминается параметр customErrors в файле Web.config, но не указывается фактическая причина ошибки:

Server Error in '/' Application.
Runtime Error 

Description: An application error occurred on the server. The current custom error settings 
for this application prevent the details of the application error from being viewed remotely 
(for security reasons). It could, however, be viewed by browsers running on the local server 
machine. 

Details: To enable the details of this specific error message to be viewable on remote machines,
please create a <customErrors> tag within a "web.config" configuration file located in the
root directory of the current web application. This <customErrors> tag should then have its
"mode" attribute set to "Off".

Возможная причина и решение

По умолчанию ASP.NET отображает подробные сведения об ошибке, только если веб-приложение работает на локальном компьютере. Как правило, вы не хотите отображать подробные сведения об ошибках, когда веб-приложение является общедоступным через Интернет, так как злоумышленники могут использовать эти сведения для поиска уязвимостей в приложении. Однако при развертывании сайта или обновлений на сайте иногда что-то пойдет не так, и вам нужно получить фактическое сообщение об ошибке.

Чтобы разрешить приложению отображать подробные сообщения об ошибках при выполнении на удаленном узле, измените файл Web.config, чтобы выключить customErrors режим, повторно разверните приложение и запустите приложение еще раз:

  1. Если в Web.config файле приложения есть customErrors элемент в элементе system.web , измените mode атрибут на "off". В противном случае добавьте customErrors элемент в system.web элемент с атрибутом mode off, как показано в следующем примере:

    <configuration>
      <system.web>
        <customErrors mode="off"/>
      </system.web>
    </configuration>
    
  2. Разверните приложения.

  3. Запустите приложение и повторите все, что вы сделали ранее, что вызвало ошибку. Теперь вы можете увидеть фактическое сообщение об ошибке.

  4. После устранения ошибки восстановите исходный customErrors параметр и повторно разверните приложение.

Доступ запрещен на веб-странице, которая использует SQL Server Compact

Сценарий

При развертывании сайта, использующего SQL Server Compact, и запуске страницы на развернутом сайте, который обращается к базе данных, отображается следующее сообщение об ошибке:

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

Возможная причина и решение

Учетная запись NETWORK SERVICE на сервере должна иметь возможность читать собственные двоичные файлы SQL Service Compact, которые находятся в папке bin\amd64 или bin\x86 , но не имеют разрешений на чтение для этих папок. Задайте разрешение на чтение для NETWORK SERVICE в папке bin , обязательно расширив разрешения на вложенные папки.

Не удается прочитать файл конфигурации из-за недостаточного разрешения

Сценарий

При нажатии кнопки публикации Visual Studio для развертывания приложения в СЛУЖБАх IIS на локальном компьютере публикация завершается ошибкой, а в окне Выходные данные отображается следующее сообщение об ошибке:

An error occurred when reading the IIS Configuration File 'MACHINE/REDIRECTION'. 
The identity performing this operation was ... Error: Cannot read configuration file due to insufficient permissions.

Возможная причина и решение

Чтобы использовать публикацию одним щелчком в IIS на локальном компьютере, необходимо запустить Visual Studio с разрешениями администратора. Закройте Visual Studio и перезапустите ее с разрешениями администратора.

Не удалось подключиться к конечному компьютеру... Использование указанного процесса

Сценарий

При нажатии кнопки публикации Visual Studio для развертывания приложения публикация завершается сбоем, а в окне Выходные данные отображается сообщение об ошибке, похожее на следующее:

Web deployment task failed.(Could not connect to the destination computer ("<server URL>") using the specified process
("The Web Management Service"). This can happen if a proxy server is interrupting communication with the destination server. 
Disable the proxy server and try again.) ... The remote server returned an error: (502) Bad Gateway.

Возможная причина и решение

Прокси-сервер прерывает связь с целевым сервером. На панель управления Windows или в internet Обозреватель выберите Свойства браузера и перейдите на вкладку Подключения. В диалоговом окне Свойства Интернета щелкните Параметры локальной сети. В диалоговом окне Параметры локальной сети снимите флажок Автоматически определять параметры . Затем снова нажмите кнопку публикации.

Если проблема не исчезнет, обратитесь к системному администратору, чтобы определить, что можно сделать с параметрами прокси-сервера или брандмауэра. Проблема возникает из-за того, что веб-развертывание использует нестандартный порт для развертывания службы веб-управления (8172); Для других подключений веб-развертывание использует порт 80. При развертывании в стороннем поставщике услуг размещения обычно используется служба веб-управления.

Пул приложений .NET 4.0 по умолчанию не существует

Сценарий

При развертывании приложения, которому требуется платформа .NET Framework 4, отображается следующее сообщение об ошибке:

The default .NET 4.0 application pool does not exist or the application could not be added. 
Please verify that ASP.NET 4.0 is installed on this machine.

Возможная причина и решение

ASP.NET 4 не устанавливается в IIS. Если сервер, на котором выполняется развертывание, является компьютером разработки и на нем установлена среда Visual Studio 2010, ASP.NET 4 установлена на компьютере, но может не быть установлена в СЛУЖБАх IIS. На сервере, на котором выполняется развертывание, откройте командную строку с повышенными привилегиями и установите ASP.NET 4 в IIS, выполнив следующие команды:

cd %windir%\Microsoft.NET\Framework\v4.0.30319
aspnet_regiis.exe –iru

Кроме того, может потребоваться вручную задать версию платформа .NET Framework пула приложений по умолчанию. Дополнительные сведения см. в руководстве По развертыванию в службах IIS в качестве тестовой среды .

Формат строки инициализации не соответствует спецификации, начиная с индекса 0.

Сценарий

После развертывания приложения с помощью публикации одним щелчком при запуске страницы, которая обращается к базе данных, появляется следующее сообщение об ошибке:

Format of the initialization string does not conform to specification starting at index 0.

Возможная причина и решение

Откройте файлWeb.config на развернутом сайте и проверка, чтобы узнать, начинаются ли значения строки подключения с $(ReplaceableToken_, как показано в следующем примере:

<connectionStrings>
  <add name="DefaultConnection" connectionString="$(ReplaceableToken_DefaultConnection-Web.config Connection String_0)" providerName="System.Data.SqlServerCe.4.0" />
  <add name="SchoolContext" connectionString="$(ReplaceableToken_SchoolContext-Web.config Connection String_0)" providerName="System.Data.SqlServerCe.4.0" />
</connectionStrings>

Если строки подключения выглядят так, как в этом примере, измените файл проекта и добавьте следующее свойство в PropertyGroup элемент , который предназначен для всех конфигураций сборки:

<AutoParameterizationWebConfigConnectionStrings>False</AutoParameterizationWebConfigConnectionStrings>

Затем повторно разверните приложение.

Внутренняя ошибка сервера HTTP 500

Сценарий

При запуске развернутого сайта отображается следующее сообщение об ошибке без конкретных сведений, указывающих на причину ошибки:

HTTP Error 500 - Internal Server Error.

Возможная причина и решение

Существует множество причин ошибок 500, но одна из возможных причин, если вы следуют этим руководствам, заключается в том, что xml-элемент помещается в неправильном месте в одном из xml-файлов преобразования. Например, эта ошибка возникает, если поместить преобразование, которое вставляет <location> элемент в <system.web> , а не непосредственно в <configuration>. Решением в этом случае является исправление XML-файла преобразования и повторное развертывание.

Внутренняя ошибка сервера HTTP 500.21

Сценарий

При запуске развернутого сайта отображается следующее сообщение об ошибке:

HTTP Error 500.21 - Internal Server Error. 
Handler "PageHandlerFactory-Integrated" has a bad module "ManagedPipelineHandler" in its module list.

Возможная причина и решение

Развернутый сайт предназначен ASP.NET 4, но ASP.NET 4 не зарегистрирован в СЛУЖБАх IIS на сервере. На сервере откройте командную строку с повышенными привилегиями и зарегистрируйте ASP.NET 4, выполнив следующие команды:

cd %windir%\Microsoft.NET\Framework\v4.0.30319
aspnet_regiis.exe –iru

Кроме того, может потребоваться вручную задать версию платформа .NET Framework пула приложений по умолчанию. Дополнительные сведения см. в руководстве По развертыванию в службах IIS в качестве тестовой среды .

Не удалось открыть базу данных SQL Server Express в App_Data

Сценарий

Вы обновили строку подключения к файлуWeb.config, указав базу данных SQL Server Express в виде MDF-файла в папке App_Data. При первом запуске приложения отображается следующее сообщение об ошибке:

System.Data.SqlClient.SqlException: Cannot open database "DatabaseName" requested by the login. The login failed.

Возможная причина и решение

Имя MDF-файла не может совпадать с именем любой SQL Server Express базы данных, которая когда-либо существовала на компьютере, даже если вы удалили MDF-файл из ранее существующей базы данных. Измените имя MDF-файла на имя, которое никогда не использовалось в качестве имени базы данных, и измените Web.config файл на новое имя. В качестве альтернативы можно использовать SQL Server Management Studio Express для удаления ранее существующих SQL Server Express баз данных.

Невозможно проверить совместимость модели

Сценарий

Вы обновили строку подключения к файлуWeb.config, чтобы она указывала на новую базу данных SQL Server Express, и при первом запуске приложения вы увидите следующее сообщение об ошибке:

Model compatibility cannot be checked because the database does not contain model metadata. 
Ensure that IncludeMetadataConvention has been added to the DbModelBuilder conventions.

Возможная причина и решение

Если имя базы данных, помещенное в файл Web.config, использовалось ранее на компьютере, возможно, уже существует база данных с некоторыми таблицами. Выберите новое имя, которое ранее не использовалось на компьютере, и измените файлWeb.config таким образом, чтобы он указывал на использование этого нового имени базы данных. В качестве альтернативы можно использовать SQL Server Management Studio Express для удаления существующей базы данных.

Ошибка SQL при попытке скрипта создать пользователей или ролей

Сценарий

Вы используете развертывание базы данных, настроенное на вкладке Пакет/публикация SQL , скрипты SQL, которые выполняются во время развертывания, включают команды Create User или Create Role, а выполнение скрипта завершается сбоем при выполнении этих команд. Вы можете увидеть более подробные сообщения, например:

The approximate location of the error was between lines '1' and '3' of the script. 
The verbose log may have more information about the error. The command started with:
CREATE USER [user2] FOR LOGIN [user2] WITH DEFAULT
Error: User does not have permission to perform this action.

Если эта ошибка возникает при настройке развертывания базы данных в мастере публикации веб-сайта , а не на вкладке Пакет/публикация SQL , создайте поток на форуме по настройке и развертыванию , и решение будет добавлено на эту страницу устранения неполадок.

Возможная причина и решение

Учетная запись пользователя, используемая для развертывания, не имеет разрешения на создание пользователей или ролей. Например, хостинговая компания может назначить db_datareaderроли , db_datawriterи db_ddladmin учетной записи пользователя, которую она настраивает для вас. Их достаточно для создания большинства объектов базы данных, но не для создания пользователей или ролей. Один из способов избежать ошибки — исключить пользователей и роли из развертывания базы данных. Это можно сделать, изменив PreSource элемент для автоматически создаваемого скрипта базы данных, чтобы он включает следующие атрибуты:

CopyAllUsers=false, CopyAllRoles=false

Сведения об изменении PreSource элемента в файле проекта см. в разделе Практическое руководство. Изменение параметров развертывания в файле проекта. Если пользователи или роли в базе данных разработки должны находиться в целевой базе данных, обратитесь за помощью к поставщику услуг размещения.

SQL Server ошибка времени ожидания при выполнении пользовательских скриптов во время развертывания

Сценарий

Вы указали пользовательские скрипты SQL для выполнения во время развертывания, а при выполнении веб-развертывания они истекают.

Возможная причина и решение

Выполнение нескольких скриптов с разными режимами транзакций может привести к ошибкам времени ожидания. По умолчанию автоматически созданные скрипты выполняются в транзакции, но пользовательские скрипты не выполняются. Если выбрать параметр Извлечь данные и (или) схему из существующей базы данных на вкладке Пакет или публикация SQL и добавить пользовательский скрипт SQL, необходимо изменить параметры транзакции в некоторых сценариях, чтобы все скрипты использовали одинаковые параметры транзакции. Дополнительные сведения см. в разделе Практическое руководство. Развертывание базы данных с помощью проекта веб-приложения.

Если вы настроили параметры транзакции так, чтобы все были одинаковыми, но по-прежнему получаете эту ошибку, возможное решение — запустить скрипты отдельно. В сетке Скрипты базы данных на вкладке Пакет или публикация SQL снимите флажок Включить проверка для скрипта, который вызывает ошибку времени ожидания, а затем опубликуйте проект. Затем вернитесь в сетку Сценарии базы данных, выберите поле Включить проверка этого скрипта и снимите флажки Включить проверка для других сценариев. Затем опубликуйте проект еще раз. На этот раз при публикации выполняется только выбранный пользовательский скрипт.

Поток данных манифеста сайта пока недоступен

Сценарий

При установке пакета с помощью файла deploy.cmd с параметром t (test) отображается следующее сообщение об ошибке:

Error: The stream data of 'sitemanifest/dbFullSql[@path='C:\TEMP\AdventureWorksGrant.sql']/sqlScript' is not yet available.

Возможная причина и решение

Сообщение об ошибке означает, что команда не может создать тестовый отчет. Однако команда может выполняться, если используется y параметр (фактическая установка). Сообщение указывает только на то, что возникла проблема с выполнением команды в тестовом режиме.

Для этого приложения требуется ManagedRuntimeVersion версии 4.0

Сценарий

При попытке развертывания отображается следующее сообщение об ошибке:

Ошибка. Потоковые данные sitemanifest/dbFullSql[@path='C:\TEMP\AdventureWorksGrant.sql']/sqlScript пока недоступны. Для пула приложений, который вы пытаетесь использовать, свойство managedRuntimeVersion имеет значение v2.0. Для этого приложения требуется версия 4.0.

Возможная причина и решение

ASP.NET 4 не устанавливается в IIS. Если сервер, на котором выполняется развертывание, является компьютером разработки и на нем установлена среда Visual Studio 2010, ASP.NET 4 установлена на компьютере, но может не быть установлена в СЛУЖБАх IIS. На сервере, на котором выполняется развертывание, откройте командную строку с повышенными привилегиями и установите ASP.NET 4 в IIS, выполнив следующие команды:

cd %windir%\Microsoft.NET\Framework\v4.0.30319
aspnet_regiis.exe –i

Не удается привести Microsoft.Web.Deployment.DeploymentProviderOptions

Сценарий

При развертывании пакета отображается следующее сообщение об ошибке:

Unable to cast object of type 'Microsoft.Web.Deployment.DeploymentProviderOptions' to 'Microsoft.Web.Deployment.DeploymentProviderOptions'.

Возможная причина и решение

Вы пытаетесь выполнить развертывание из диспетчера IIS с помощью пользовательского интерфейса веб-развертывания 1.1 на сервере с установленным веб-развертыванием 2.0. Если вы используете средство удаленного администрирования IIS для развертывания путем импорта пакета, проверка диалоговое окно Новые доступные функции при установке подключения. (Это диалоговое окно может отображаться только один раз при первой установке подключения. Чтобы очистить подключение и начать заново, закройте диспетчер IIS и снова запустите его, введя inetmgr /reset в командной строке.) Если одним из перечисленных компонентов является пользовательский интерфейс веб-развертывания и номер версии ниже 8, на сервере, на котором выполняется развертывание, могут быть установлены версии веб-развертывания 1.1 и 2.0. Для развертывания из клиента, на котором установлена версия 2.0, на сервере должна быть установлена только версия Web Deploy 2.0. Чтобы устранить эту проблему, необходимо обратиться к поставщику услуг размещения.

Не удается загрузить собственные компоненты SQL Server Compact

Сценарий

При запуске развернутого сайта отображается следующее сообщение об ошибке:

Unable to load the native components of SQL Server Compact corresponding to the ADO.NET provider of version 8482. 
Install the correct version of SQL Server Compact. Refer to KB article 974247 for more details.

Возможная причина и решение

Развернутый сайт не содержит вложенных папок amd64 и x86 с собственными сборками в папке bin приложения. На компьютере с установленным SQL Server Compact собственные сборки находятся в папке C:\Program Files\Microsoft SQL Server Compact Edition\v4.0\Private. Лучший способ получить правильные файлы в нужные папки в проекте Visual Studio — установить пакет NuGet SqlServerCompact. Установка пакета добавляет скрипт после сборки для копирования собственных сборок в amd64 и x86. Однако для их развертывания необходимо вручную включить их в проект. Дополнительные сведения см. в руководстве По развертыванию SQL Server Compact.

Ошибка "Путь недопустим" после развертывания приложения Entity Framework Code First

Сценарий

Вы развертываете приложение, использующее Entity Framework Code First Migrations, и СУБД, например SQL Server Compact которая хранит свою базу данных в файле в папке App_Data. Вы Code First Migrations настроены для создания базы данных после первого развертывания. При запуске приложения появляется сообщение об ошибке, как показано в следующем примере:

The path is not valid. Check the directory for the database. [Path = c:\inetpub\wwwroot\App_Data\DatabaseName.sdf ]

Возможная причина и решение

Code First пытается создать базу данных, но папка App_Data не существует. Либо у вас не было файлов в папке App_Data при развертывании, либо вы выбрали Исключить App_Data на вкладке Веб-пакет/публикация окна Свойства проекта . Процесс развертывания не создаст папку на сервере, если в ней нет файлов для копирования на сервер. Если база данных уже настроена на сайте, процесс развертывания удалит файлы и саму папку App_Data , если вы выбрали Удалить дополнительные файлы в месте назначения в профиле публикации. Чтобы устранить эту проблему, поместите файл заполнителя, например файл .txt, в папку App_Data , убедитесь, что не выбран параметр Исключить App_Data , и повторно разверните его.

"COM-объект, который был отделен от базового RCW, не может быть использован".

Сценарий

Вы успешно использовали публикацию одним щелчком для развертывания приложения, а затем начали получать следующее сообщение об ошибке:

Web deployment task failed. (Could not complete the request to remote agent URL 'https://serverurl.com/msdeploy.axd?site=sitename'.)
Could not complete the request to remote agent URL 'https://url/msdeploy.axd?site=sitename'.
The request was aborted: The request was canceled.
COM object that has been separated from its underlying RCW cannot be used.

Возможная причина и решение

Для устранения этой ошибки обычно требуется закрыть и перезапустить Visual Studio.

Сбой развертывания, так как учетные данные пользователя, используемые для публикации, не имеют центра setACL

Сценарий

Публикация завершается ошибкой, указывающей на то, что у вас нет полномочий на настройку разрешений для папки (у учетной записи пользователя, которую вы используете, нет центра setACL).

Возможная причина и решение

По умолчанию Visual Studio задает разрешения на чтение в корневой папке сайта и разрешения на запись в папке App_Data. Если вы знаете, что разрешения по умолчанию для папок сайта правильные и их не нужно задавать, отключите это поведение, добавив <IncludeSetACLProviderOn Destination>False</IncludeSetACLProviderOnDestination> в файл профиля публикации (чтобы повлиять на один профиль) или в файл wpp.targets (чтобы повлиять на все профили). Сведения об изменении этих файлов см. в разделе Практическое руководство. Изменение параметров развертывания в файлах профиля (PUBXML).

Ошибки отказа в доступе, когда приложение пытается выполнить запись в папку приложения

Сценарий

Приложение получает ошибки при попытке создать или изменить файл в одной из папок приложения, так как оно не имеет полномочий записи для этой папки.

Возможная причина и решение

По умолчанию Visual Studio задает разрешения на чтение в корневой папке сайта и разрешения на запись в папке App_Data. Если приложению требуется доступ на запись во вложенную папку, можно задать разрешения для этой папки, как показано в руководствах Настройка разрешений для папок и Развертывание в рабочей среде . Если приложению требуется доступ на запись в корневую папку сайта, необходимо запретить ему настроить доступ только для чтения в корневой папке, добавив <IncludeSetACLProviderOn Destination>False</IncludeSetACLProviderOnDestination> в файл профиля публикации (чтобы повлиять на один профиль) или в файл wpp.targets (для влияния на все профили). Сведения об изменении этих файлов см. в разделе Практическое руководство. Изменение параметров развертывания в файлах профиля (PUBXML).

Ошибка конфигурации. Атрибут targetFramework ссылается на версию, которая выше установленной версии платформа .NET Framework

Сценарий

Вы успешно опубликовали веб-проект, предназначенный для ASP.NET 4.5, но при запуске приложения (в customErrors Web.config файле в режиме "выкл.") возникает следующая ошибка:

The 'targetFramework' attribute in the <compilation> element of the Web.config 
file is used only to target version 4.0 and later of the .NET Framework (for 
example, '<compilation targetFramework="4.0">'). The 'targetFramework' attribute 
currently references a version that is later than the installed version of the 
.NET Framework. Specify a valid target version of the .NET Framework, or install 
the required version of the .NET Framework.

В поле Ошибка источника на странице ошибки в качестве причины ошибки выделяется следующая строка из Web.config:

<compilation targetFramework="4.5" />

Возможная причина и решение

Сервер не поддерживает ASP.NET 4.5. Обратитесь к поставщику услуг размещения, чтобы определить, когда и если можно добавить поддержку ASP.NET 4.5. Если обновление сервера невозможно, необходимо развернуть веб-проект, предназначенный ASP.NET 4 или более ранней версии. Если вы развертываете веб-проект ASP.NET 4 или более ранней версии в том же месте назначения, установите флажок Удалить дополнительные файлы в целевом проверка на вкладке Параметры мастера публикации веб-страницы. Если не выбрать удалить дополнительные файлы в месте назначения, вы по-прежнему будете получать страницу Ошибка конфигурации.

Окна свойств проекта содержат раскрывающийся список Целевая платформа, но вы не можете устранить эту проблему, просто изменив ее с платформа .NET Framework 4.5 на платформа .NET Framework 4. Если вы измените целевую платформу на более раннюю версию, проект по-прежнему будет иметь ссылки на сборки более поздней версии платформы и не будет выполняться. Необходимо вручную изменить эти ссылки или создать проект, предназначенный платформа .NET Framework 4 или более ранней версии. Дополнительные сведения см. в разделе платформа .NET Framework Нацеливание на веб-сайты.