#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:
Решение заключалось в сочетании двух вещей:
- Мне нужно было установить соответствующие разрешения для каталога, в котором находились файлы SQL Server CE.
- Необходимо было восстановить Entity Framework, чтобы снова указать базы данных SQL CE. По какой-то причине приложение фактически проглатывало ошибки, которые были просто «не удалось подключиться к базе данных X», что-то в каком-то сгенерированном коде вышло из синхронизации.