-PR-
  • 困ってます
  • 質問No.7518920
解決
済み

web.config に接続設定を追加するとエラー

  • 閲覧数1364
  • ありがとう数2
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 89% (81/91)

お世話になっております。

作業マシン:WINDOWS Server2008 (仮想)
開発ツール:VWD2010(VB)
使用DB:SQLServer2008R2
IIS:作業マシンのIISルート配下

にて、Webアプリを開発しております。
知識としてははここ2週間始めたばかりで、
今現在入門書を参考に仕組みを理解しようとしている所です。
言語よりも環境、インフラの内容で躓く事が多く、
皆様をはじめ、過去の質問にはお世話になる日々です。

タイトルが文字数少なく、内容を簡潔に書ききれていませんが
問題は、
「web.config に接続設定を追加すると、開発環境でエラー。
 削除すると公開環境でエラー。」
と言うものです。以下詳細です。

メンバーシップフレームワークを使用し、ログイン画面を作成しております。
プロジェクトの内容は、
[画面]
ツールボックスのログイン>Loginで設置しただけのログイン画面login.aspxと
ログイン画面から遷移する menu.aspx のみです。

[DB]
SQLServerには(Web サイト管理ツールから追加した)
ユーザーレコードを持つaspnet_Usersテーブルと、自身で追加したTable1テーブル
を含む、デフォルト名のDB、"ASPNETDB.MDF"があります。

[動作]
ログインに成功すればmenu.aspx に遷移し、
Table1から参照した表を見るだけの試し用プロジェクトです。

[異常内容]
デバッグ環境とデプロイ先(IIS)とで接続設定の要求が異なり、
両方が共通のソースで動かないと言うものです。
プロジェクトは、ログインコントロールの設置で
"LocalSqlServer"という接続を持つようになります。
このLocalSqlServerは、Web.configに自動生成はされませんが
デバッグ時には問題なく実行されます。
(おそらくどこかに接続=接続文字列情報を持っているのだと思います。)

しかし、IISrootにデプロイしますと、フレームワークのconfig,
" Framework64\v4.0.30319\config\machine.config" が
"LocalSqlServerを見つけられなかったか接続文字列が空です"というエラーを吐きます。

プロジェクトでWeb.Configに接続設定を追加しますと
(web.config に <add connectionString = [接続文字列] > を、追加 )
デプロイ時にIISに自動で接続情報が作成されるようになり
運用環境での動作は問題ありませんが、
そのソースを開発環境でデバッグ実行しますと、
"LocalSqlServerはすでに追加されています"というエラーが出て停止します。

まとめますと
 "LocalSqlServer"の接続設定がないとIISで動かせない。
  しかし接続設定を加えると開発環境でデバッグが動かない。
と言う状況です。「どちらでも動くソース」ができません。

デバッグ時に動く ASP.NET 開発サーバー だけで、
常にLocalSqlServerが有効である状態なのだと思いますが、
このままですとサイトを発行(デプロイ)するたびに
Web.configに"LocalSqlServer"の追加操作をしなければならず、
メンバーにそんな説明はとても出来ません。。

この状況を自力で解決出来そうになく、どうかお知恵をおかしください。
よろしくお願いします。


ひとつあたりを付けているのは、この開発環境では
複数のプロジェクトで、同じDB (デフォルトで出来る"ASPNETDB.MDF")を
使っている事です。
他のプロジェクトで"LocalSqlServer"(接続文字列も同じ)を使っているので
他プロジェクトでもデフォルト名のDBを使う場合Web.configに接続設定が不要になり
むしろ追加するとエラーになる…などと言うことはあり得ますでしょうか?
 (試せればよいのですが、確信なく既存プロジェクトをいじる訳にはいかず、
  自宅では異常が再現せず、試せずにいます)
  • 回答数1
  • 気になる数0

質問者が選んだベストアンサー

  • 回答No.1
レベル11

ベストアンサー率 81% (127/155)

> デバッグ時に動く ASP.NET 開発サーバー だけで、
> 常にLocalSqlServerが有効である状態なのだと思いますが、

いえ、この認識があやまりです。
LocalSqlServerの設定は.NET Frameworkのレベルで設定されます。
正確にはmachine.configというファイルで設定されています。
このため、「開発サーバーだけ」で有効ということはなく、運用サーバーでも有効です。

で、web.configは階層的に設定できるようになっているので、上位で設定されているもの
(上記の場合LocalSqlServer)を下位で設定しようとすると
"LocalSqlServerはすでに追加されています"
というエラーが発生します。

ということで、開発環境でLocalSqlServerを追加したときの動作は正しいです。
web.config中で一度LocalSqlServerの設定を削除して追加する、という記述を行えば
正しく動くと思います。

逆に、運用環境ではこのエラーがでないことのほうがおかしいです。
なにか環境の設定が正しくできていないことが考えられます。

wwwrootフォルダにアプリケーションを配置したのだとすると、よくあるフォルダを
Webアプリケーションとして設定していない、というミスは起こっていないと
思いますので、あとは正しいフレームワークのバージョン設定ができていない、とかでしょうか。

なんにせよ、web.configの使い方やIISの設定に関する知識を整理されたほうがよいと思います。
メンバーシップを利用する際のweb.config等については2006年当時の資料で最新の状態では
ないですが、参照URLの資料も参考にしてみてください。
お礼コメント
wendy0303

お礼率 89% (81/91)

Onos様
いつも的確な回答と助言をありがとうございます。

認識違いである箇所まで遡り、
再度自分の認識と、現在の環境とを整理しようとおもいます。
投稿日時 - 2012-06-07 12:27:23
  • ありがとう数0
-PR-
-PR-
  • 回答数1
  • 気になる数0
このQ&Aで解決しましたか?

関連するQ&A

-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ