Тайм-аут повторной попытки доступа к файлу (ASP.NET WebPages/Razor/C#)

Я продолжаю получать ключевое слово не поддерживается: ошибка «тайм-аут повторной попытки доступа к файлу» при просмотре страниц, которые обращаются к моей базе данных.

Поэтому я предполагаю, что он не может получить доступ к базе данных. У меня была точно такая же проблема всего несколько минут назад, когда я просматривал свою домашнюю страницу. Я изменил (в моем файле _AppStart.cshtml) это:

WebSecurity.InitializeDatabaseConnection("MYDB", etc, etc, etc, etc);

to:

WebSecurity.InitializeDatabaseConnection("Data Source=|DataDirectory|\\MYDB.sdf", "System.Data.SqlServerCe.4.0", etc, etc, etc, etc);

и это сработало!

Однако, когда я перехожу на другую страницу (которая пыталась получить доступ к базе данных из класса C# (файл .cs), я получаю ту же ошибку!

Но в моем файле С# (.cs) я не могу изменить:

var database = Database.Open("MYDB");

to:

var database = Database.Open("Data Source=|DataDirectory|\\MYDB.sdf", "System.Data.SqlServerCe.4.0", etc, etc, etc, etc);

... потому что там написано:

Никакая перегрузка для метода Open не принимает 2 аргумента (очевидно).

Ошибка (до внесения вышеуказанного изменения в файл .cs:

Ошибка сервера в приложении '/'

Ключевое слово не поддерживается: «тайм-аут повторной попытки доступа к файлу». Описание: во время выполнения текущего веб-запроса возникло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.ArgumentException: ключевое слово не поддерживается: «тайм-аут повторной попытки доступа к файлу».

Ошибка источника:

> 
> Line 161:     foreach(string item in items) Line 162:     { Line 163:         var
> row = database.QuerySingle("select Suburb, State from
> SuburbsPostCodesAndStates where Suburb = @0", item); Line
> 164:          if(row != null) Line 165:           {
>   

Исходный файл: c:\HostingSpaces\jpezzime\mysite.com\wwwroot\App_Code\JTSi.cs Строка: 163

Трассировки стека:

[ArgumentException: ключевое слово не поддерживается: «тайм-аут повторной попытки доступа к файлу».]
System.Data.SqlServerCe.SqlCeConnectionStringBuilder.GetIndex(ключевое слово String) +198
System.Data.SqlServerCe.SqlCeConnectionStringBuilder.set_Item(ключевое слово String, Object значение) +31
System.Data.Common.DbConnectionStringBuilder.set_ConnectionString(строковое значение) +185
System.Data.SqlServerCe.SqlCeConnectionStringBuilder..ctor(String connectionString) +181
System.Data.SqlServerCe. SqlCeConnection.set_ConnectionString(строковое значение) +241
WebMatrix.Data.DbProviderFactoryWrapper.CreateConnection(String connectionString) +96
WebMatrix.Data.‹>c_DisplayClass15.b_14() +16 WebMatrix.Data.Database.get_Connection() +19 WebMatrix.Data.Database.EnsureConnectionOpen() +13
WebMatrix.Data.d__0.MoveNext() +72
System.Linq.Enumerable.FirstOrDefault(элементы IEnumerable1 source) +4232212
WebMatrix.Data.Database.QuerySingle(String commandText, Object[] args) +98 JTSi.FindSetAndRemoveLocation(List
1) в c:\HostingSpaces\jpezzime\mysite.com\wwwroot\App_Code\JTSi.cs:163 ASP._Page_Share d_Pages_Search_cshtml.Execute() в c:\HostingSpaces\jpezzime\mysite.com\wwwroot\Shared\Pages\Search.cshtml:17 System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +208
System.Web.WebPages. WebPage.ExecutePageHierarchy(исполнители IEnumerable`1) +68 System.Web.WebPages.WebPage.ExecutePageHierarchy() +123 System.Web.WebPages.StartPage.RunPage() +19 System.Web.WebPages.StartPage.ExecutePageHierarchy() +67
System.Web.WebPages.StartPage.RunPage() +19
System.Web.WebPages.StartPage.ExecutePageHierarchy() +67
System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter Writer , WebPageRenderingBase startPage) +78
System.Web.WebPages.WebPageHttpHandler.ProcessRequestInternal(HttpContextBase httpContext) +121

-------------------------------------------------- ------------------------------ Информация о версии: Версия Microsoft .NET Framework: 4.0.30319; Версия ASP.NET: 4.0.30319.272

Может ли кто-нибудь помочь пролить свет на это? Я совершенно не представляю, как веб-сайт может превратиться из совершенно потрясающего в полностью испорченный всего за несколько минут, когда я даже не вносил никаких изменений!


person Arrow    schedule 02.07.2012    source источник


Ответы (2)


Решение:

заменять:

var database = Database.Open("MYDB");

с:

var database = Database.OpenConnectionString("Data Source=|DataDirectory|\\MYDB.sdf", "System.Data.SqlServerCe.4.0");
person Arrow    schedule 02.07.2012

Это проблема со строкой подключения — "Доступ к файлам Retry Timeout» — это новое ключевое слово, добавленное в новую версию SQL Compact. Возможно, вы используете более старую версию на сервере.

person 48klocs    schedule 02.07.2012
comment
Спасибо 48klocs. Я только что нашел метод OpenConnectionString сразу после того, как опубликовал вопрос. Я попробовал, и это сработало. Однако приятно знать, интересно, насколько это ново, потому что около получаса назад все работало просто отлично :/ Ну, теперь все работает :) - person Arrow; 02.07.2012
comment
@Jason Недостаток использования OpenConnectionString заключается в том, что он игнорирует тот, который вы настроили в своем файле web.config - если параметры местоположения / версии / подключения вашей базы данных изменяются, это означает, что вам нужно перекомпилировать и повторно развернуть, а не настроить строка в конфиге. В том, что вы делаете, нет ничего плохого, но об этом следует знать, поскольку код, переопределяющий настройки конфигурации, часто вызывает удивление. - person 48klocs; 02.07.2012
comment
спасибо, я не знал об этом. Я только что закончил читать ссылку, которую вы разместили, и, насколько я могу судить, все, что мне нужно сделать, это просто загрузить новый CP1 по предоставленной ссылке и установить его, чтобы он обновлялся? - person Arrow; 02.07.2012
comment
Я только что запустил файл MSI, включенный в эту загрузку, и оказалось, что у меня уже есть более новая версия. - person Arrow; 02.07.2012