0

在本地一切正常,但是当我发布时,出现以下错误。我正在使用表单身份验证,但我将自己的连接字符串定义为非 sqlexpress 数据库。我不明白为什么我的应用程序需要访问权限才能在 App_Data 文件夹中创建数据库(或其他任何内容),因为我的数据库不存在/不会存在。任何帮助表示赞赏。

连接字符串:

<connectionStrings>
    <add name="DataContext" providerName="System.Data.SqlClient" connectionString="Data Source=localhost;Initial Catalog={my db};Integrated Security=SSPI;MultipleActiveResultSets=True" />
</connectionStrings>

错误:

访问被拒绝创建 App_Data 子目录

说明:出于安全原因,身份“IIS APPPOOL\ASP.NET v4.0”(此 Web 应用程序在其下运行)无权在应用程序根目录中创建 App_Data 子目录。ASP.NET 将用于服务(例如 Membership 和 Profile)的 Microsoft SQL Express 数据库文件存储在应用程序的 App_Data 子目录中。

编辑:它告诉我如何通过添加 App_Data 文件夹并提供正确的权限来修复错误,但我不明白为什么我需要这个文件夹,如果我可以避免更改权限,我想这样做。

4

3 回答 3

1

我想我终于想出了如何阻止 ASP 尝试在 App_Data 文件夹中自动创建 ASPNETDB.MDF 数据库。我发现的工作结合了两个现有的 stackoverflow 答案:

禁用 SQL 成员资格提供程序(ASP.Net 表单身份验证)

事实证明,在生产机器上,SQL 成员资格提供程序是在 machine.config 中定义的。我不认为操作团队对默认的 Windows 2008 安装进行了任何更改,因此该平台可能通常是这种情况。

要删除对在更高级别定义的任何 SQL 提供程序的引用,请在您的 web.config 中包含以下内容

<membership>
    <providers>
        <clear />       
    </providers>
</membership>
<roleManager enabled="false">
    <providers>
        <clear />       
    </providers>
</roleManager>
<profile>
    <providers>
        <clear />       
    </providers>
</profile>

AspNet 角色提供者开始了,它不应该是

要禁用“SimpleMembership”,您可以使用 value="false" (web.config) 添加应用设置 enableSimpleMembership。这将阻止 webmatrix 重新配置 RoleManager。

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
    <appSettings>
        <add key="enableSimpleMembership" value="false" />
    </appSettings>
</configuration>
于 2013-08-12T22:33:04.450 回答
0

检查 web.config 中“membership”节点的“connectionStringName”属性是否设置为您的连接字符串,如下所示:

<membership defaultProvider="DefaultMembershipProvider">
  <providers>
    <add name="DefaultMembershipProvider" 
         type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
         connectionStringName="DataContext"
         enablePasswordRetrieval="false" 
         enablePasswordReset="true" 
         requiresQuestionAndAnswer="false" 
         requiresUniqueEmail="false" 
         maxInvalidPasswordAttempts="5" 
         minRequiredPasswordLength="6" 
         minRequiredNonalphanumericCharacters="0" 
         passwordAttemptWindow="10" 
         applicationName="/" />
  </providers>
</membership>
于 2013-08-11T22:20:23.817 回答
0
*<membership>
    <providers>
        <clear />       
    </providers>
</membership>
<roleManager enabled="false">
    <providers>
        <clear />       
    </providers>
</roleManager>
<profile>
    <providers>
        <clear />       
    </providers>
</profile>*
于 2014-10-16T10:21:27.553 回答