4

データベースからコンテンツを取得する MVC4 を使用してサイトを構築しましたが、すべて正常に動作します。

その後、ソリューションを再構築し、変更を確認するためにページを更新しようとすると、常に SQL Network Interfaces, error: 26 が表示され、サーバーに接続できないというメッセージが表示されます。

ただし、自分のホームページを参照してから、見ていたページに戻ると、問題なく動作します。

本当に迷惑なので、この問題の原因を知っている人はいますか

編集

これに加えて、再構築後に AuthorizationContext filterContext がロードされているときに、db に接続できないことがわかりました。

編集2

以下のニールと同様に、ロールが割り当てられているページにアクセスしようとした場合にのみ問題が発生することがわかりました

4

3 に答える 3

2

まったく同じ問題が発生しており、ブラウザーの .ASPXAUTH セッション Cookie までたどることができます。その Cookie を削除すると、次の再構築までデータベース エラーがなくなります。

認証されてからプロジェクトを再構築し、次のいずれかのページを参照しようとすると、エラーが定期的に発生します。

  • 認証が必要です
  • User オブジェクトを呼び出します (例: @if (User.IsInRole("Administrators")))

App_Start/FilterConfig.cs に AuthorizeAttribute フィルターが設定されている場合は、すべてのページでこれを取得します。

これは、最新のパッチ チューズデーの更新後の新しい動作のようです。以前は、ログインしたままでもロール メンバーシップが失われるという奇妙な動作が見られました。最新のパッチの後、悪い .ASPXAUTH Cookie (再構築のため無効) を取得すると、Simple Membership が詰まるようです。

InitializeSimpleMembershipAttribute.cs に正しい接続文字列がありますが、この 1 つのインスタンスでは Simple Membership がデフォルトで別のものに設定されているようです。

Simple Membership データベースを元の (localDb) から本格的な (ローカル) SQL Server インスタンスに移動したことに注意してください。なぜそれが問題になるのかわかりませんが、他のすべての場合にうまく機能します。

アップデート:

また、接続文字列名を EF コンテキスト名 (「ProjectContext」など) と同じにすることも試みましたが、標準の規則にデフォルト設定されているという理論に基づいていますが、違いはありませんでした。すべてのコンテキスト クラス コンストラクターで (: base("connectionString")構文を使用して) 接続文字列名を明示的に識別しており、Simple Membership はそれ以外の場合に適切な接続文字列を見つけることができます。

更新 2:

この問題は、役割で保護されたページにアクセスするときに再構築後にのみ発生します。シンプル[Authorize]はそれをトリガーしません。のようなものが必要です[Authorize(Role="Admin")]。デフォルト (localDb) データベースを使用して、他に変更を加えることなく、これを新しい MVC 4 プロジェクトに複製しました。Cookie をクリアすると、同じユーザーが保護されたコンテンツに問題なくアクセスできます。これは .NET または MVC のコア バグであり、そのように報告する必要があると思います。

于 2012-11-23T12:43:09.100 に答える
2

これは、ブラウザにログインしてアプリケーションを再構築しているときに発生しました。

Cookie を削除すると問題が解決しました。

于 2014-10-06T19:42:49.960 に答える
0

SimpleMembership を使用している場合、このバグは、コントローラーだけでなく、以下を使用するときにも Roles を使用すると発生します。

if(Roles.IsUserInRole(ロール名){...

この回答でゲームに遅れましたが、ホームコントローラーに [InitializeSimpleMembership] を追加したところ、修正されたと思います。

于 2013-08-22T20:57:11.990 に答える