При использовании MVC3 SQL CE я получаю 404 на всех страницах со строительными лесами для базы данных SQL CE

#asp.net-mvc-3 #sql-server-ce #http-status-code-404

#asp.net-mvc-3 #sql-server-ce #http-status-code-404

Вопрос:

Проблема возникает только на сервере с Windows 2008 Server, локально я запускаю приложение и не имею проблем. Я использовал опции «bin deploy» и «Добавить развертываемые зависимости …» и все равно не повезло. Еще немного контекста…

Параметры безопасности в IIS установлены для проверки подлинности Windows, в web.config есть небольшое исключение анонимных пользователей (не уверен, что это даже имеет значение в этом сценарии).

   <authentication mode="Windows" />
  

В файле Global.asax.cs у меня есть стандартный сгенерированный шаблоном код.

 public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
}

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.IgnoreRoute("elmah.axd");
    routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );
}
  

Единственное дополнение, которое я сделал, это для elmah и значка. Я не уверен, на что еще обратить внимание с этого момента, поэтому буду признателен за любую помощь.

Кроме того, моя строка подключения к SQL CE выглядит следующим образом:

 <add name="BillingLogDbEntities" connectionString="metadata=res://*/Models.BillingLog.csdl|res://*/Models.BillingLog.ssdl|res://*/Models.BillingLog.msl;provider=System.Data.SqlServerCe.4.0;provider connection string=amp;quot;Data Source=|DataDirectory|BillingLogDb.sdfamp;quot;" providerName="System.Data.EntityClient" />
    <add name="BillingLocalDbEntities" connectionString="metadata=res://*/Models.BillingLocal.csdl|res://*/Models.BillingLocal.ssdl|res://*/Models.BillingLocal.msl;provider=System.Data.SqlServerCe.4.0;provider connection string=amp;quot;Data Source=|DataDirectory|BillingLocalDb.sdfamp;quot;" providerName="System.Data.EntityClient" />
    <add name="OverlayServicesDbEntities" connectionString="metadata=res://*/Models.OverlayServices.csdl|res://*/Models.OverlayServices.ssdl|res://*/Models.OverlayServices.msl;provider=System.Data.SqlServerCe.4.0;provider connection string=amp;quot;Data Source=|DataDirectory|OverlayServicesDb.sdfamp;quot;" providerName="System.Data.EntityClient" />
  

Комментарии:

1. может быть, глупый вопрос, установлен ли ваш конвейер приложений IIS на » Интегрированный «?

2. Не могли бы вы показать свою строку подключения?

3. rockinthesixstring — я проверю это.

4. Вы проверили разрешения для каталога данных, содержащего файл SQL CE db после развертывания? Попробуйте подключиться к Application_Error в вашем global.ascx и проверить последнее исключение с помощью Server. GetLastError()

Ответ №1:

Решение заключалось в сочетании двух вещей:

  1. Мне нужно было установить соответствующие разрешения для каталога, в котором находились файлы SQL Server CE.
  2. Необходимо было восстановить Entity Framework, чтобы снова указать базы данных SQL CE. По какой-то причине приложение фактически проглатывало ошибки, которые были просто «не удалось подключиться к базе данных X», что-то в каком-то сгенерированном коде вышло из синхронизации.