0

私の自宅のコンピューターは、Visual Studio 2012 と SQL Server 2008 R2 を実行しています。この Web サイトは、VWD10/SQLEXPRESS を実行している私の仕事用コンピューターで動作しています。admin.aspx ページ以外のすべてのページにアクセスして実行できます。

正常にログインした後、管理者の aspx ページをクリックします。このページには loginview コントロールが 1 つしかなく、コード ビハインドはありません。Web サイトがハングして、次のエラーが表示されます。

SQL Server への接続を確立中に、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできませんでした。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。(プロバイダー: SQL ネットワーク インターフェイス、エラー: 26 - 指定されたサーバー/インスタンスの検索中にエラーが発生しました)

loginview コントロールを削除して、再試行しました。コードとコントロールが正しく読み込まれていないページ。私の次の試みは、ページの読み込みに追加することでした:

string str = Roles.GetRolesForUser("Admin").First();

これにより同じエラーが発生しました。その後、ページをコードビハインドなしと 1 つの loginview コントロールに戻しました。

Role クラスはデータベースにアクセスできないのに、メンバーシップ クラスはアクセスできる理由がわかりません。

これが私のweb.configです。これが問題の原因であると思われます

    <?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <location path="~/Admin.aspx">
    <system.web>
      <authorization>
        <allow roles="Admin,Maintainer,Manager,Supervisor" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
  <location path="~/Admin_Machines.aspx">
    <system.web>
      <authorization>
        <allow roles="Admin,Maintainer,Manager" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
  <location path="~/Admin_Workcenters.aspx">
    <system.web>
      <authorization>
        <allow roles="Admin,Maintainer,Manager" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
  <location path="~/Admin_Procedure.aspx">
    <system.web>
      <authorization>
        <allow roles="Admin,Maintainer,Manager,Supervisor" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
  <location path="~/Admin_Users.aspx">
    <system.web>
      <authorization>
        <allow roles="Admin,Manager" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
  <location path="~/Admin_Section.aspx">
    <system.web>
      <authorization>
        <allow roles="Admin,Maintainer,Manager" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
  <location path="~/Admin_Tensile.aspx">
    <system.web>
      <authorization>
        <allow roles="Admin,Maintainer,Manager" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
  <location path="~/Procedures">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>
  <system.web>
    <roleManager enabled="true" />
    <authentication mode="Forms" />
    <membership defaultProvider="myProvider">
      <providers>
        <add name="myProvider"  type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
        connectionStringName="userdb" enablePasswordRetrieval="false" 
        enablePasswordReset="true" requiresQuestionAndAnswer="false" applicationName="/" 
        requiresUniqueEmail="True" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6"
        minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
        passwordStrengthRegularExpression="" />
      </providers>
    </membership>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        <add assembly="System.Data.Entity.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        <add assembly="System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
      </assemblies>
      <buildProviders>
        <add extension=".edmx" type="System.Data.Entity.Design.AspNet.EntityDesignerBuildProvider" />
      </buildProviders>
    </compilation>
  </system.web>
  <connectionStrings>
    <!--Home/School connection(SQLSERVER 2008 R2-->
    <add name="QualityEntities" connectionString="metadata=res://*/App_Code.Model.csdl|res://*/App_Code.Model.ssdl|res://*/App_Code.Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=QUALITY.MDF;user id=sa;password=****;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
    <add name="userdb" connectionString="Data Source=.;Initial Catalog=ASPNETDB;uid=sa;Password=****" />
    <!--Work Connection(SQLEXPRESS)-->
    <!--<add name="QualityEntities" connectionString="metadata=res://*/App_Code.Model.csdl|res://*/App_Code.Model.ssdl|res://*/App_Code.Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQLEXPRESS;attachdbfilename=|DataDirectory|\Quality.mdf;integrated security=True;connect timeout=30;user instance=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />-->
    <!--<add name="userdb" connectionString="data source=.\SQLEXPRESS;attachdbfilename=|DataDirectory|\ASPNETDB.mdf;integrated security=True;connect timeout=30;user instance=True;multipleactiveresultsets=True;" />-->
  </connectionStrings>
</configuration>
4

1 に答える 1

1

問題は、ロール プロバイダーを定義していなかったため、sqlexpress ロール プロバイダーを使用していたことです。私の自宅のコンピューターには sqlexpress がありませんでした。そのため、データベースは自宅のコンピューターではなく職場のコンピューターで機能していました。ログインできたのは、メンバーシップ プロバイダーを構成していたからです。

変更した問題を修正する

<roleManager enabled="true" />

<roleManager defaultProvider="myRoleProvider" enabled="true">
  <providers>
    <clear/>
    <add
      name="myRoleProvider"
      type="System.Web.Security.SqlRoleProvider"
      connectionStringName="userdb"
      applicationName="/" />
  </providers>
</roleManager>
于 2013-01-13T05:13:14.180 に答える