Получение “ошибки автосоздания файла базы данных SQLExpress” для сайта, который использует AspNetSqlMembershipProvider, но строка подключения является к SQL Server 2005

Это кажется, что у Вас есть потоки, непосредственно завершающие приложение? Возможно, было бы лучше иметь сигнал потока основной поток, чтобы сказать, что приложение должно быть завершено.

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

7
задан Keren Caelen 22 June 2018 в 06:52
поделиться

2 ответа

Согласно вашему комментарию, похоже, что вы явно не настроили поставщика ролей для своего сайта.

Если все, что находится в вашем web.config, это:

<roleManager enabled="true" />

Тогда вы полагаются на поставщиков по умолчанию, объявленных далее в иерархии конфигурации (machine.config, global web.config и т. д.)

В machine.config у вас, вероятно, есть что-то вроде:

<roleManager>
  <providers>
    <add name="AspNetSqlRoleProvider" 
      connectionStringName="LocalSqlServer" 
      applicationName="/" 
      type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
    <add name="AspNetWindowsTokenRoleProvider" 
      applicationName="/" 
      type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
  </providers>
</roleManager>

Как видите, первый поставщик сконфигурирован для использования строки соединения с именем LocalSqlServer, который также обычно объявляется в файле machine.config:

<add name="LocalSqlServer" 
     connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" 
     providerName="System.Data.SqlClient"/>

И он предназначен для использования локальной файловой базы данных, которая будет создана, если она еще не существует.

Итак чтобы роли работали на вашем сайте, вам следует изменить корневой файл web.config на что-то вроде:

<roleManager enabled="true">
  <providers>
    <clear />
    <add name="AspNetSqlRoleProvider" 
      connectionStringName="YourConnectionStringName" 
      applicationName="/" 
      type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
  </providers>
</roleManager>

Используя элемент удалит всех ранее определенных поставщиков для этого типа.

12
ответ дан 6 December 2019 в 19:39
поделиться

Когда вы указываете параметр AttachDBFilename в строке подключения, вы на самом деле запрашиваете экземпляр SQL Server, очень-очень-очень-своевременно подготовленный, также известный как "пользовательский экземпляр". Этот экземпляр создается путем запроса «главного» экземпляра (экземпляра. \ SQLEXPRESS) на предоставление дочернего экземпляра, что подразумевает копирование master / model / msdb в ваш профиль, запуск нового процесса SQL Server под вашей учетной записью, настроенной для использования только что скопированный master / model / msdb, затем попросив этот «дочерний» экземпляр прикрепить указанный «файл» в качестве новой базы данных. Подробности описаны в Пользовательские экземпляры SQL Server 2005 Express Edition .

Процесс создания дочернего экземпляра чрезвычайно хрупок, и когда он прерывает вызов БД, в конечном итоге приводит к ошибке тайм-аута при открытии соединения. В вашем случае кажется, что в некоторых случаях процесс прерывается (когда вы попадаете в защищенную часть сайта). Почему ломается, без надлежащей информации очень сложно догадаться. Посмотрите Общие проблемы в связанной статье и посмотрите, применимы ли они к вам. Также проверьте журнал системных событий на предмет сообщений о том, почему дочерние экземпляры не могут запуститься или не могут открыть файл MDF. Обратите внимание, что распространенной ошибкой является запрос одного и того же физического файла с AttachDBFilename под разными учетными данными: каждая учетная запись запускает свой собственный «дочерний» экземпляр, и только первый из них сможет присоединить желаемую базу данных.

В вашем случае кажется, что в некоторых случаях процесс прерывается (когда вы попадаете в защищенную часть сайта). Почему ломается, без надлежащей информации очень сложно догадаться. Посмотрите Общие проблемы в связанной статье и посмотрите, применимы ли они к вам. Также проверьте журнал системных событий на наличие сообщений о том, почему дочерние экземпляры не могут запуститься или не могут открыть файл MDF. Обратите внимание, что распространенной ошибкой является запрос одного и того же физического файла с AttachDBFilename под разными учетными данными: каждая учетная запись запускает свой собственный «дочерний» экземпляр, и только первый из них сможет присоединить желаемую базу данных.

В вашем случае кажется, что в некоторых случаях процесс прерывается (когда вы попадаете в защищенную часть сайта). Почему ломается, без надлежащей информации очень сложно догадаться. Посмотрите Общие проблемы в связанной статье и посмотрите, применимы ли они к вам. Также проверьте журнал системных событий на наличие сообщений о том, почему дочерние экземпляры не могут запуститься или не могут открыть файл MDF. Обратите внимание, что распространенной ошибкой является запрос одного и того же физического файла с AttachDBFilename под разными учетными данными: каждая учетная запись запускает свой собственный «дочерний» экземпляр, и только первый из них сможет присоединить желаемую базу данных.

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

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

1
ответ дан 6 December 2019 в 19:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: