7

WebサイトにSQLServerLocalDBを使用しています。

SQL Server LocalDBがインストールされ、セットアップ中にデータベースが作成されます。共有インスタンスは、 LocalDBCreateInstanceStartLocalDBInstance、およびLocalDBShareInstanceを介して作成されます。

インスタンスが開始されている場合、Webサイトはデータベースに正常に接続できます。

ただし、インスタンスが停止した場合、インスタンスは自動的に開始されません。コンソールアプリケーションからデータベースにアクセスすると(インスタンスが停止している場合)、インスタンスが起動します。

したがって、これはある種の許可の問題のようです。

アプリケーションプールは、AppPoolIDで実行されます。ただし、ネットワークサービスまたはローカルシステムに切り替えても問題は解決しません。

アプリケーションプールは、そのユーザープロファイルをロードするように構成されており、「setProfileEnvironment」属性もtrueに設定されています。(ここここで説明されているように、両方の設定が必要です)。

Sysinternal Process Monitorを使用してデータベースアクセスを監視しましたが、「アクセスが拒否されました」エントリが見つかりませんでした。

また、Webサイト自体(Global.asax内)からStartLocalDBInstanceを呼び出そうとしました。呼び出しは正常に戻りますが(戻り値はS_OK)、インスタンスは引き続き停止します。

4

1 に答える 1

8

これが、IIS で LocalDB を使用することの欠点です。インスタンスは対話型ログインによって所有され、インスタンス プロセスはこのログインによってのみ開始できます。IIS は一部のサービス アカウントとして実行されるため、対話型ログイン アカウントに属する LocalDB インスタンスを開始できません。

IIS サービス アカウントが所有する LocalDB インスタンスを使用することもできますが、ユーザー プロファイルの問題が発生する可能性があることに注意してください。 .

完全な IIS で LocalDB を実行する方法の詳細については、これら 2 つのブログ投稿を参照してください。開発環境にのみお勧めし、本番環境にはサービスベースの SQL Express を使用します。

  1. パート 1: ユーザー プロファイル
  2. パート 2: インスタンスの所有権
于 2012-12-07T18:21:27.797 に答える