奇妙な「レジストリからの構成情報の読み取りエラー。」 ASP.NET sessionState sqlConnectionString(アクセス許可ではない)

asp.net asp.net-4.0 connection-string session-state windows-server-2008
奇妙な「レジストリからの構成情報の読み取りエラー。」 ASP.NET sessionState sqlConnectionString(アクセス許可ではない)

要するに、ASP.NETは、接続文字列が十分に長い場合、セッション状態の暗号化された接続文字列の読み取りに失敗したようです。

詳細は以下のとおりです。

Windows Server 2008とASP.NET 4に同時にアップグレードするため、開発環境をセットアップできません。 セッション状態をSQL Serverに保存し、web.configに対応する構成があります

レジストリにエントリを作成しました

aspnet_setreg.exe -k:Software\SomeAppName\SessionState -c:"data source=SomeSqlServer\INST3;initial Catalog=AspStateDb;user id=some-user;password=some-password"

それをWOW6432NODEから適切な場所にコピーし、適切な権限を適用しました(NETWORK_SERVICESにフルコントロールをHKLM \ Software \ SomeAppName全体に付与)。

そして、ここから奇妙なことが始まります。 ブラウザでアプリケーションを開こうとすると、「レジストリからの構成情報の読み取りエラー」が発生します。 sesssionState構成を指すエラー。 EventViewerからの詳細はこちら

Event code: 3008
Event message: A configuration error has occurred.
Event time: 9/8/2011 7:32:02 AM
Event time (UTC): 9/8/2011 2:32:02 PM
Event ID: 6e68be241c3d4105a0dec4de7b3724d0
Event sequence: 2
Event occurrence: 1
Event detail code: 0

Application information:
    Application domain: /LM/W3SVC/blah-blah-blah
    Trust level: Full
    Application Virtual Path: /SomeAppName
    Application Path: C:\inetpub\wwwroot\SomeAppName
    Machine name: SomeWebServer

Process information:
    Process ID: 4044
    Process name: w3wp.exe
    Account name: NT AUTHORITY\NETWORK SERVICE

Exception information:
    Exception type: ConfigurationErrorsException
    Exception message: Error reading configuration information from the registry. (C:\inetpub\wwwroot\SomeAppName\web.config line 89)

Request information:
    Request URL: http://SomeWebServer/SomeAppName/default.aspx
    Request path: /SomeAppName/default.aspx
    User host address: 10.X.X.X
    User:
    Is authenticated: False
    Authentication Type:
    Thread account name: NT AUTHORITY\NETWORK SERVICE

Thread information:
    Thread ID: 3
    Thread account name: NT AUTHORITY\NETWORK SERVICE
    Is impersonating: False
    Stack trace:    at System.Web.Configuration.ConfigsHelper.GetRegistryStringAttribute(String& val, ConfigurationElement config, String propName)
   at System.Web.SessionState.SqlSessionStateStore.OneTimeInit()
   at System.Web.SessionState.SqlSessionStateStore.Initialize(String name, NameValueCollection config)
   at System.Web.SessionState.SqlSessionStateStore.Initialize(String name, NameValueCollection config, IPartitionResolver partitionResolver)
   at System.Web.SessionState.SessionStateModule.InitModuleFromConfig(HttpApplication app, SessionStateSection config)
   at System.Web.SessionState.SessionStateModule.Init(HttpApplication app)
   at System.Web.HttpApplication.InitModulesCommon()
   at System.Web.HttpApplication.InitInternal(HttpContext context, HttpApplicationState state, MethodInfo[] handlers)
   at System.Web.HttpApplicationFactory.GetNormalApplicationInstance(HttpContext context)
   at System.Web.HttpApplicationFactory.GetApplicationInstance(HttpContext context)
   at System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr)

奇妙なことに、このエラーはSQL接続文字列のコンテンツの長さに依存しているようです。 SysInternals ProcMonを使用して、w3wp.exeが実際にレジストリキーを正常に読み取ることを確認しました。 「動作する」と「動作しない」の唯一の違いは、動作する場合、w3wp.exeが1回の試行でそれを読み取るのに対して、「動作しない」最初の試行はバッファオーバーフローで失敗するようです(まったく関係ないかもしれませんが、疑わしいようです)。

現在のソリューションは、見た目の動作と同じくらい奇妙です。「SomeSqlServer」のエイリアスを「s」(1文字)に短縮するために、hostsファイルにエントリを明示的に追加しました。 これにより、接続文字列が減り、動作するようになります。 しかし、何が起こるのか、なぜこれが役立つのかは明らかではありません。

「機能しない」接続文字列の長さは約90文字です。 「動作する」ものは80未満です。 正確なエッジを見つけるために時間を費やしませんでした。

また、レジストリ内の接続文字列(aspnet_setreg.exeで設定)を他の方法で短くしようとしました。

  • パスワード「a」でSQL Serverユーザー「a」を一時的に作成し、使用します
    接続文字列で彼。 これも問題を「修正」するようです。

  • 既存のユーザーの間違った1文字のパスワードを
    接続文字列とエラーは、SQL Serverへのログインに失敗することが予想されていました。

  • 明らかに間違った(ただし短い)接続文字列を置き、エラーが変更されました
    悪い文字列形式について何か。

現在、私たちが持っているすべての証拠は、レジストリ内の比較的長い暗号化された接続文字列に何か問題があることを示していますが、何がなぜなのかは明確ではありません。 そして、以前の環境(Windows Server 2003 + ASP.NET 2.0)にこのようなものがないのはなぜですか? 実際、そのような奇妙なバグを信じることは非常に難しいですが、今のところ他のアイデアはありません。

誰かが前にこのような何かを見たことがありますか? 何か提案はありますか? レジストリに適切な権限を付与することで修正される同様の苦情のログがあるため、このエラーをグーグルにすることは困難ですが、これは私たちの場合ではないことを確信しています。

  0  0


ベストアンサー

これが何であったかは明らかではありません。 もう再現できません。 私たちが今のところ持っている最良の説明は、どういうわけかパーミッションを台無しにしたということです。

0


タイトルとURLをコピーしました