Веб-приложение / учебное пособие по MVC3 не будет входить в систему с использованием ASPNETDB.mdf на веб-сервере IIS7

Я только что загрузил свое веб-приложение MVC3 ASP.net на мой сервер 2008 R2 IIS 7.5 Express.

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

"Извините, произошла ошибка при обработке вашего запроса."

Если я просматриваю веб-приложение на своем веб-сервере (из IIS7.5) и пробую ссылку для входа, я получаю следующую ошибку ASP:

"При установлении соединения с SQL Server произошла ошибка, связанная с сетью или конкретным экземпляром. Сервер не был найден или не был доступен. Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен для разрешения удаленных подключений. (Поставщик: Сетевые интерфейсы SQL, ошибка: 26 - ошибка при поиске сервера / указан экземпляр)"

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

"Сведения об исключении: System.Data.SqlClient.SqlException: ошибка, связанная с сетью или конкретным экземпляром, возникла при установлении соединения с SQL Server. Сервер не был найден или не был доступен. Убедитесь, что имя экземпляра правильное и этот SQL Сервер настроен для разрешения удаленных подключений (поставщик: сетевые интерфейсы SQL, ошибка: 26 - ошибка при поиске сервера / указан экземпляр) "

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

Может, кто-нибудь поможет мне решить проблему, пожалуйста?

У меня есть две базы данных, настроенные в моем Web.Config:

<connectionStrings>
    <add name="DatabaseDBContext" connectionString="data source=|DataDirectory|Content_Database.sdf" providerName="System.Data.SqlServerCe.4.0"/>
    <add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
  </connectionStrings>

База данных SQL Compact (Content_Database.sdf) работает нормально. Я получаю ошибку только при попытке доступа к базе данных aspnetdb.mdf.

База данных ASPNETDB.mdf практически идентична состоянию, которое вы получаете при загрузке шаблона / руководства Microsoft MVC3 Razor из Visual Web Developer Express 2010.

Я попытался установить SQL Express 2008 на свой веб-сервер на случай, если это будет проблемой, без разницы.

Целое веб-приложение прекрасно работает на моем сервере разработки Visual Web Developer 2010 Express (я могу создавать пользователей и успешно входить и выходить из них). Он просто терпит неудачу, как только он загружен на веб-сервер.

Помощь оценена - большое спасибо:-)

Полный Web.Config:

    <?xml version="1.0"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=152368
  -->

<configuration>
  <connectionStrings>
      <add name="DatabaseDBContext" connectionString="data source=|DataDirectory|\Content_Database.sdf" />
      <add name="ApplicationServices" connectionString="data source=|DataDirectory|\aspnetdb.sdf" />

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

  <appSettings>
    <add key="webpages:Version" value="1.0.0.0"/>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
  </appSettings>

  <system.web>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      </assemblies>
    </compilation>

    <authentication mode="Forms">
      <forms loginUrl="~/Admin/LogOn" timeout="2880" />
    </authentication>

    <membership>
      <providers>
        <clear/>
            <add name="SqlCeMembershipProvider" type="Project1.Domain.SqlCeMembershipProvider" connectionStringName="ApplicationServices" applicationName="/"
         enablePasswordRetrieval="false" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" passwordFormat="Hashed" writeExceptionsToEventLog="false" />
            <!--<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
             enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
             maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
             applicationName="/" />-->
      </providers>
    </membership>

    <profile>
      <providers>
        <clear/>
        <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
      </providers>
    </profile>

    <roleManager defaultProvider="SqlCeRoleProvider"
             enabled="true"
             cacheRolesInCookie="true"
             cookieName=".ASPROLES"
             cookieTimeout="30"
             cookiePath="/"
             cookieRequireSSL="false"
             cookieSlidingExpiration="true"
             cookieProtection="All">
      <providers>
        <clear/>
          <add name="SqlCeRoleProvider" type="System.Web.Security.SqlCeRoleProvider" connectionStringName="ApplicationServices" applicationName="/" writeExceptionsToEventLog="true" />
        <!--<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />-->
        <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
      </providers>
    </roleManager>

    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages"/>
      </namespaces>
    </pages>
  </system.web>

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration

>

1 ответ

Похоже, ваш DatabaseDBContext/SDF, если база данных Sql Compact. Этот движок сильно отличается от точки зрения администратора. В принципе, это очень просто настроить и начать работать.

Ваш файл ApplicationServices/mdf не является компактной базой данных, он использует обычный механизм SQL (Express, Dev, рабочая группа, стандарт, предприятие и т. Д.). Это требует небольшой настройки, чтобы начать работать. Ваш data source= опция настраивает SqlClient для использования определенного механизма, установленного на локальном компьютере, для открытия базы данных (для этого потребуется установить sql на локальный компьютер в качестве инсталлированной установки с именем SqlExpress) и правильно настроить его для разрешения соединений (возможно, удаленных), Integrated Security настраивает SqlClient для подключения к серверу в качестве пользователя, настроенного в AppPool для подключения к базе данных, что требует, чтобы этот пользователь имел доступ к файлу, в котором хранится база данных, к самой базе данных (внутри в качестве защиты) и ко всем другие требования безопасности SSPI (которые я настоятельно рекомендую вам сохранить).

Обновить

У меня есть несколько проектов, работающих исключительно на Compact Framework (потому что для небольших проектов гораздо проще поддерживать / администрировать).

Чтобы использовать SQL Server Compact 4, необходимо установить инструменты Visual Studio для SQL Server Compact 4. Я использую erikej SQL Compact Providers (членство и роль) для asp.net и не сталкивался с какими-либо проблемами. Приятной особенностью поставщиков является то, что большая часть кода, который вы написали для текущих поставщиков, не изменится, вы просто заменяете поставщика и базу данных.

В любом случае, счастливого кодирования!

Обновление 2

Мой web.config имеет следующие записи:

<connectionStrings>
 <add name="membershipDatabase" 
      connectionString="data source=|DataDirectory|\Membership.sdf" />
</connectionStrings>

<membership defaultProvider="SqlCeMembershipProvider">
  <providers>
    <clear />
    <add name="SqlCeMembershipProvider" 
         type="Project1.Domain.SqlCeMembershipProvider"           
         connectionStringName="membershipDatabase" 
         applicationName="/" 
         enablePasswordRetrieval="false" 
         requiresQuestionAndAnswer="false" 
         requiresUniqueEmail="true" 
         passwordFormat="Hashed"  
         writeExceptionsToEventLog="false" />
  </providers>
</membership>
<roleManager defaultProvider="SqlCeRoleProvider" 
             enabled="true" 
             cacheRolesInCookie="true" 
             cookieName=".ASPROLES" 
             cookieTimeout="30" 
             cookiePath="/" 
             cookieRequireSSL="false" 
             cookieSlidingExpiration="true" 
             cookieProtection="All">
  <providers>
    <clear />
    <add name="SqlCeRoleProvider" 
         type="Project1.Domain.SqlCeRoleProvider" 
         connectionStringName="membershipDatabase" 
         applicationName="/" 
         writeExceptionsToEventLog="true" />
  </providers>
</roleManager>
Другие вопросы по тегам