locked
VS2008 Pro版で作成したASP.NETのサイトを、Vistaに付属しているIIS7のサイトとして公開する方法 RRS feed

  • 質問

  • 誠に初歩的な質問で恐縮ですが、現在、VS2008を使いC#ベースでASP.NETのサイトを作成しました。SQL Serverとも連携して動作することを開発環境ベースで確認しました。
    このサイトを、別なWindows Vista PCの正式はIIS7上で動作させようとIISのHelpを読み始めたのですが、理解しきれません。

    以下のポイントを教えていただけないでしょうか。

    1)VS2008のProjectから、何をコピーすればよいか
       ※VSのメニュー[ビルド]→[xxxxの発行]の「Webの発行」でモジュールを出力する時に、「ターゲットの場所」を自分のPCの適当なフォルダを指定して、仮に出力しておき、そのフォルダを、実際にIISを動かすPCにコピーする方法ではよいのでしょうか?

    2)IISを動作させるPCに1)で発行したフォルダをwwwrootと同じ階層にコピーし、そのコピーしたフォルダを、IISのWebサイトに追加
      しましたが、ASP.NETを機能させるめに何か設定が必要だと思うのですが、

    まったくのIIS初心者なので、このあたりの設定方法などを解説したサイトなどありましたら教えていただけないでしょうか?
    よろしくお願いします。

    Reiji Tanaka
    2009年11月27日 5:48

回答

  • Windows Vista はクライアント向けの Windows であり、サーバーとして利用する際には制限があります。
    よって、不特定多数のユーザを対象に公開するのであれば、Windows Vista を使うのは不適当です。

    クライアント版Windowsに付属するIISの制限 - @IT
    http://www.atmarkit.co.jp/fwin2k/win2ktips/207rest_iis_pro/rest_iis_pro.html


    なお、実際に配置したことはありませんが、MSDN でそれらしいページというところでリンクしておきます。

    ASP.NET 配置の概要
    http://msdn.microsoft.com/ja-jp/library/bb398992.aspx


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。

    • 回答としてマーク Reiji 2009年11月28日 13:58
    2009年11月27日 14:55
  • 仮に出力しておき、そのフォルダを、実際にIISを動かすPCにコピー
    本番環境では不要なファイル (.sln や .csproj など) を取り除き、必要なもののみ IIS マシンにコピーしたいんですよね。。。。そのやり方でよいと思います。

     

    ASP.NETを機能させるめに何か設定が必要だと思うのですが
    Vista の IIS7 ということですので、、、Windows の機能の有効化または無効化のダイアログを開き、
    Internet Information Services
     World Wide Web サービス
      アプリケーション開発機能
       ASP.NET
    
    ASP.NET のチェックボックスをオンにしてください。
    画像で説明すると、ttp://www.tutorial.useiis7.net/b002/img6.jpg です。

    あとは、、、IIS アプリケーション指定をすること、くらいですかね。IIS6 での説明ですけど、ttp://aspplus.nobody.jp/200612/16/1216.htm の "4. アプリケーションルート指定" をご覧ください。 Vista IIS7 での GUI は IIS6 とは異なり ttp://aspplus.nobody.jp/200701/15/04.png や ttp://aspplus.nobody.jp/200701/15/07.png な感じになっています。

    • 回答としてマーク Reiji 2009年11月28日 13:57
    2009年11月27日 16:00
  • すでに IIS7 の設定はクリアして、ASP.NET から SQL Server へのログインの問題になって
    いるようですが、SQL Server へのログインや DB へのアクセス権の設定はできているので
    しょうか? もしまだなら、以下のページの SQL Server のセクションを見て、設定してみたら
    どうでしょう?

    How To: ASP.NET で Network Service アカウントを使用してリソースにアクセスする方法
    http://msdn.microsoft.com/ja-jp/library/ms998320.aspx

    • 回答としてマーク Reiji 2009年11月28日 13:56
    2009年11月28日 11:41
  • > >[Databases] フォルダを展開し、続いて Pubs データベース (または Pubs に相当するデータベース) を展開します。
    >
    > この意味がいまひとつわかりません。
    > 実際には、IISのc:\interbul\approot\App_Data\ASPNETDB.MDFがおかれています。

    「Pubs データベース」というのは Microsoft が提供しているサンプルデータベースのことです。
    Northwind と共に、チュートリアルなどでよく使われています。

    今回の場合は、ASPNETDB.MDF を展開することになります。ただし、その前にアタッチする必要が
    あり、さらにその前に SQL Server のサービスアカウントにデータ/ログファイル (.mdf, .ldf)
    があるフォルダに対するフルコントロール権限を与える必要があります。

    言葉足らずですみませんでしたが、先に紹介したサイトの記事は、データベースがすでにアタッチ
    されていることが前提になっています。

    > [データベース]フォルダに、ASPNETDB.MDFをアタッチすればよいと考え、アタッチを試みましたが、エラーとなり、
    > アタッチできませんでした。

    それはたぶん、上に書いたように、SQL Server のサービスアカウントにアクセス権がないからだ
    と思います。詳しくは以下のページを見てください(「SQL Server サービスに対する Windows
    権限の確認」のセクションを特に)。

    SQL Server 2005 Books Online (2008 年 11 月)
    Windows サービス アカウントの設定
    http://msdn.microsoft.com/ja-jp/library/ms143504(SQL.90).aspx

    なお、Express Edition の場合は、上記のページの、アカウント名、グループ名を以下のように読
    み替えてください。

    アカウント: MSSQLSERVER → MSSQL$SQLEXPRESS
    グループ:    SQLServer2005MSSQLUser$ComputerName$MSSQLSERVER → SQLServerMSSQLUser$ComputerName$SQLEXPRESS

    > Management Studioで[データベース]フォルダに、実際に必要なDBをAttachしなければ、IISからSQL Serverの
    > Databaseにアクセスできないとも思えないのですが、根本的に、何かを間違えているように思います。

    ユーザーインスタンスを利用すれば、アタッチしなくても可能です。開発環境ではユーザーインス
    タンスを利用しており、それをそのまま「別なWindows Vista PC」移行したため、いまはユーザー
    インスタンスを使って動いているのだと思います。

    ユーザーインスタンスは開発環境のみに利用し、本番環境には使わないのが普通です。いろいろ制
    限がありますので。詳しくは以下のサイトを見てください。

    管理者以外のユーザーのためのユーザー インスタンス
    http://msdn.microsoft.com/ja-jp/library/ms143684.aspx

    • 回答としてマーク Reiji 2009年11月29日 11:02
    2009年11月29日 1:43

すべての返信

  • Windows Vista はクライアント向けの Windows であり、サーバーとして利用する際には制限があります。
    よって、不特定多数のユーザを対象に公開するのであれば、Windows Vista を使うのは不適当です。

    クライアント版Windowsに付属するIISの制限 - @IT
    http://www.atmarkit.co.jp/fwin2k/win2ktips/207rest_iis_pro/rest_iis_pro.html


    なお、実際に配置したことはありませんが、MSDN でそれらしいページというところでリンクしておきます。

    ASP.NET 配置の概要
    http://msdn.microsoft.com/ja-jp/library/bb398992.aspx


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。

    • 回答としてマーク Reiji 2009年11月28日 13:58
    2009年11月27日 14:55
  • 仮に出力しておき、そのフォルダを、実際にIISを動かすPCにコピー
    本番環境では不要なファイル (.sln や .csproj など) を取り除き、必要なもののみ IIS マシンにコピーしたいんですよね。。。。そのやり方でよいと思います。

     

    ASP.NETを機能させるめに何か設定が必要だと思うのですが
    Vista の IIS7 ということですので、、、Windows の機能の有効化または無効化のダイアログを開き、
    Internet Information Services
     World Wide Web サービス
      アプリケーション開発機能
       ASP.NET
    
    ASP.NET のチェックボックスをオンにしてください。
    画像で説明すると、ttp://www.tutorial.useiis7.net/b002/img6.jpg です。

    あとは、、、IIS アプリケーション指定をすること、くらいですかね。IIS6 での説明ですけど、ttp://aspplus.nobody.jp/200612/16/1216.htm の "4. アプリケーションルート指定" をご覧ください。 Vista IIS7 での GUI は IIS6 とは異なり ttp://aspplus.nobody.jp/200701/15/04.png や ttp://aspplus.nobody.jp/200701/15/07.png な感じになっています。

    • 回答としてマーク Reiji 2009年11月28日 13:57
    2009年11月27日 16:00
  • 「Webの発行」で直接Webサーバーに発行することもできます。その場合、アプリケーションルートの設定も自動で行ってくれます。また、例えばCrystal Reportsのマージモジュールなどは「Webの発行」では配置できません。「Webセットアッププロジェクト」によってWebサーバーに配置できます。一度「Webセットアッププロジェクト」で配置してしまえば、純粋にASP.NETのアプリケーション部分の変更であるならば、次からは「Webの発行」でも可能です。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年11月27日 16:26
  • Azulean さん

    コメントありがとうございます。
    イントラ内限定の数人で利用するサイトなのでVistaのクライアント版のIISでも、とくに運用上でも支障になることはなさそうです。
    教えていただいたサイトは、参考にさせていただきます。
    Reiji Tanaka
    2009年11月28日 2:46
  • 0gata さん

    ご助言ありがとうございます。
    ASP.NETの機能がInstallされていませんでした。
    これをInstallして、VSで発行したフォルダを、実際のIISのサーバにコピーし、コピーしたフォルダを、サイトに指定したところ、TOPページは表示できるようになりました。

    第一段階は、クリアできました。

    ところが、開発しているサイトでは、フォーム認証を使用しています。
    開発環境で、使用しているMDFファイルもコピーしているのですが、認証が行われません。
    IISのフォーム認証で、SQL Serverへのアクセスを可能にするために、SQL Serverのアクセスを行うようにするために、
    どのような構成を、SQL Server側に行う必要があるか、ご助言いただければ助かります。

    実際のIISのサーバには、SQL Server 2005 ExpressがInstallしているのですが、SQL ServerのMDFへのアクセスをさせるために、ビルトインアカウントで、”ネットワークサービス”(デフォルトのまま)となっているのですが、開発環境のままを、そのまま、IIS+SQL Server 2005ベースのフォーム認証で動作させるサンプルなどの情報をご存じであれば、教えてください。

    よろしくお願いします。

    Reiji Tanaka
    2009年11月28日 5:27
  • どのようなエラーが出ているでしょうか?
    想像ではaspnet_regsql.exeを実行する必要があるように思います。確認してみて下さい。

    ASP.NET アプリケーション構成でのSQL Serverの設定
    http://ameblo.jp/headtrip/entry-10228860828.html


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年11月28日 6:01
  • trapemiya さん

    ASP.NET SQL Serverセットアップを起動するところまでは行ったのですが、
    SQL Serverデータベースに接続できません。
    このツールで表示されるものをデフォルトのままで使用しています。
    認証は、「Windows認証」を選択した状態で、ウィザードで次へと進めていくと、
    エラーになります。

    エラーの内容からすると、SQL Serverへ接続できないことが原因のようです。
    SQL Serverのサービスは起動中になっています。

    SQL Serverの構成の方法を理解できていないのですが、SQL構成マネージャで、

    [ログオン]→ビルトインアカウント(ネットワークサービス)を使用しています。
    SQLEXPRESSのプロトコルでは、共有メモリ=有効で、その他の”名前付きパイプ”、”TCP/IP”、”VIA”は無効に
    なっています。

    同じPC上でIISとSQL Serverを同居させ、他のPCからSQLServerへ接続しないように構成し、フォーム認証を使うには、
    SQL Server側の設定で必要なことは何かありますでしょうか。


    サーバ名:[マシンの名前]
    データベース名:[<既定>]を使用すると実際には、→aspnetdbが指定されるようです



    ====エラーメッセージ====
    セットアップに失敗しました。
    例外:
    SQL Server データベースに接続できません。
    ----------------------------------------
    エラーの詳細
    ----------------------------------------
    System.Web.HttpException: SQL Server データベースに接続できません。 --->
    ====以下省略===


    よろしくお願いします。

     


    Reiji Tanaka
    2009年11月28日 7:30

  • (以下のページで扱っているのは Vista IIS7 じゃなく、2008 の IIS7 ですが)
    http://tryiis7.spaces.live.com/blog/cns!A57DF6C28B81A8C1!522.entry

    > Forms Authentication (と Anonymous Authentication) を有効にします。

    > 匿名ユーザー(認証通ってない人々)を締め出すルールを追加します。Anonymous Users を Deny です。
    が肝かも。。。





    IIS7 worker process と MS-SQL 2005 Express の連絡の部分でも色々ありそうですが今回はコメントしません。
    (一度に大量の情報をばらまいても。。。ね)

    MS-SQL 2005 Express との連絡部分に関しては、(フォーム認証の件は後回しにして) .aspx ページから
     .mdf へのアクセスができるかどうか試す簡単なアプリを書いて試せばすむでしょうし。。。




    もしや、開発中は ASP.NET 開発サーバー (WebDev.WebServer.EXE) をお使いですか?
    開発の作業自体を Vista + IIS7 + VS2008Pro. 上で行えば、配置時の悩みは減りますよ。
    http://ap.atmarkit.co.jp/bbs/core/fdotnet/16413 (ここの ガギグ ってヤツが私です)



    2009年11月28日 8:06
  • ASP.NET SQL Serverセットアップを起動するところまでは行ったのですが、
    SQL Serverデータベースに接続できません。


    (1) MDFファイルを vista iis7 上にコピーしている。
    (2) その MDF の中にフォーム認証のユーザー情報等が入っている。
    ならば、vista iis7 マシンにて ASP.NET SQL Serverセットアップ (aspnet_regsql.exe) を実行する必要ないですよ。



    開発用マシンから vista iis7 マシンにコピーした、MDF を如何にして利用可能にするかを追及されてみてはいかが?



    Vista iis7 マシンで SQL Server 2005 Express の User Instance (RANU) 機能を使います?
    それとも、RANU は使わない?
    (きっと、開発時には RANU を使っていたのだと思いますが、vista iis7 マシンにて RANU を利用し続けるメリットは特にないと思いますよ)



    2009年11月28日 8:28
  • 0gata さん

    いろいろコメントありがとうございます。

    (1)MDFファイルは、/App_Data以下にコピーしています
    (2)そのMDFの中には認証用のユーザ情報は入っています。

    ということなので、そのまま使えることを期待していました。

    今回、助言いただきました、User Instance (RANU)の機能の使用の有無に関して、MDFにアクセスの可能、不可能に影響を与えるのか、いまひとつ想像がつきません。

    もう少し思考錯誤してみます。

    何かお気づきのことがあれば、よろしくお願いします。


    Reiji Tanaka
    2009年11月28日 9:11
  • 0gata さん

    すでにASP.NET開発サーバで開発したものを、途中から、IIS7に切り換える方法など、参考になる情報があれば、教えていただけると助かります。
    ほとんど初心者で、すみません。


    Reiji Tanaka
    2009年11月28日 9:13
  • すでに IIS7 の設定はクリアして、ASP.NET から SQL Server へのログインの問題になって
    いるようですが、SQL Server へのログインや DB へのアクセス権の設定はできているので
    しょうか? もしまだなら、以下のページの SQL Server のセクションを見て、設定してみたら
    どうでしょう?

    How To: ASP.NET で Network Service アカウントを使用してリソースにアクセスする方法
    http://msdn.microsoft.com/ja-jp/library/ms998320.aspx

    • 回答としてマーク Reiji 2009年11月28日 13:56
    2009年11月28日 11:41
  • SurferOnWww さん

    紹介いただきましたHowToに沿って試してみようと思いましたが、どうもうまくできません。

    SQL Server Management Studio Expressで構成しようとしていますが、このHowtoには、「SQL Server Enterprise Manager」
    を使うようにかかれていますが、SQL Server Expressを使用しているので間違っていないと思っています。

    >[Security] フォルダで [Logins] を右クリックし、続いて [New Login] をクリックします。
    [SQL Server Login Properties - New Login] ダイアログ ボックスの [Name] ボックスに、"NT AUTHORITY\NETWORK SERVICE" と入力します。その他の設定はデフォルトのままで、[OK] をクリックします。

    というところまでは、正常に作成できました。
    つづいて、以下の処理を行うこととなっています。

    >[Databases] フォルダを展開し、続いて Pubs データベース (または Pubs に相当するデータベース) を展開します。

    この意味がいまひとつわかりません。
    実際には、IISのc:\interbul\approot\App_Data\ASPNETDB.MDFがおかれています。
    [データベース]フォルダに、ASPNETDB.MDFをアタッチすればよいと考え、アタッチを試みましたが、エラーとなり、アタッチできませんでした。

    Management Studioで[データベース]フォルダに、実際に必要なDBをAttachしなければ、IISからSQL ServerのDatabaseにアクセスできないとも思えないのですが、根本的に、何かを間違えているように思います。

    よろしくお願いします。


    Reiji Tanaka
    2009年11月28日 13:35
  • サーバ名:[マシンの名前]
    データベース名:[<既定>]を使用すると実際には、→aspnetdbが指定されるようです
    SQL Server 2005 Express の場合、デフォルトでsqlexpressという名前付きインスタンスになります。したがって、サーバー名を
    「.\sqlexpress」で試してみて下さい。少なくともここで接続できないのはおかしいです。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年11月28日 13:46
  • みなさん へ

    いろいろ多くの方に、ご助言いただきありがとうございます。
    いろいろな設定をためしていて、設定が交錯してしまっていたのかもしれません。
    一度、IISの構成で、Webサイトを削除し、再度いままでの有効だった部分を設定したところ、Loginできるようになりました。
    何が悪かったのか、よくわかりませんが、とりあえず、教えていただいたことを、順番に行うとうまくできたという状況です。

    もう一度確認したうえで、整理してみます。

    ありがとうございました。
    Reiji Tanaka
    2009年11月28日 13:55
  • (1) MDFファイルを vista iis7 上にコピーしている。
    (2) その MDF の中にフォーム認証のユーザー情報等が入っている。
    ならば、vista iis7 マシンにて ASP.NET SQL Serverセットアップ (aspnet_regsql.exe) を実行する必要ないですよ。
    あ~、そうか。App_data内のmdfファイルがユーザーインスタンスとして使用されるので、aspnet_regsql.exeでaspnetdbをSQL Serever 2005 Express上に作成しても使われないという意味ですよね?
    ASP.NETでSQL Serever 2005 Expressを使ったことが無かったので、根本的に私の理解が足りなかったようです。


    Vista iis7 マシンで SQL Server 2005 Express の User Instance (RANU) 機能を使います?
    それとも、RANU は使わない?
    (きっと、開発時には RANU を使っていたのだと思いますが、vista iis7 マシンにて RANU を利用し続けるメリットは特にないと思いますよ)
    実際の運用時にはユーザーインスタンスではなく、aspnet_regsql.exeでaspnetdbを作成し、web.configで接続文字列を書き変えてそれを使った方が良いという意味ですよね?
    ユーザーインスタンスは既定では60分でタイムアウトしてシャットダウンしますし、ユーザーインスタンスはmdfファイルに可搬性を与えるという性格上、webアプリケーションにはあまり適切ではないということですね。
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年11月28日 14:25
  • > >[Databases] フォルダを展開し、続いて Pubs データベース (または Pubs に相当するデータベース) を展開します。
    >
    > この意味がいまひとつわかりません。
    > 実際には、IISのc:\interbul\approot\App_Data\ASPNETDB.MDFがおかれています。

    「Pubs データベース」というのは Microsoft が提供しているサンプルデータベースのことです。
    Northwind と共に、チュートリアルなどでよく使われています。

    今回の場合は、ASPNETDB.MDF を展開することになります。ただし、その前にアタッチする必要が
    あり、さらにその前に SQL Server のサービスアカウントにデータ/ログファイル (.mdf, .ldf)
    があるフォルダに対するフルコントロール権限を与える必要があります。

    言葉足らずですみませんでしたが、先に紹介したサイトの記事は、データベースがすでにアタッチ
    されていることが前提になっています。

    > [データベース]フォルダに、ASPNETDB.MDFをアタッチすればよいと考え、アタッチを試みましたが、エラーとなり、
    > アタッチできませんでした。

    それはたぶん、上に書いたように、SQL Server のサービスアカウントにアクセス権がないからだ
    と思います。詳しくは以下のページを見てください(「SQL Server サービスに対する Windows
    権限の確認」のセクションを特に)。

    SQL Server 2005 Books Online (2008 年 11 月)
    Windows サービス アカウントの設定
    http://msdn.microsoft.com/ja-jp/library/ms143504(SQL.90).aspx

    なお、Express Edition の場合は、上記のページの、アカウント名、グループ名を以下のように読
    み替えてください。

    アカウント: MSSQLSERVER → MSSQL$SQLEXPRESS
    グループ:    SQLServer2005MSSQLUser$ComputerName$MSSQLSERVER → SQLServerMSSQLUser$ComputerName$SQLEXPRESS

    > Management Studioで[データベース]フォルダに、実際に必要なDBをAttachしなければ、IISからSQL Serverの
    > Databaseにアクセスできないとも思えないのですが、根本的に、何かを間違えているように思います。

    ユーザーインスタンスを利用すれば、アタッチしなくても可能です。開発環境ではユーザーインス
    タンスを利用しており、それをそのまま「別なWindows Vista PC」移行したため、いまはユーザー
    インスタンスを使って動いているのだと思います。

    ユーザーインスタンスは開発環境のみに利用し、本番環境には使わないのが普通です。いろいろ制
    限がありますので。詳しくは以下のサイトを見てください。

    管理者以外のユーザーのためのユーザー インスタンス
    http://msdn.microsoft.com/ja-jp/library/ms143684.aspx

    • 回答としてマーク Reiji 2009年11月29日 11:02
    2009年11月29日 1:43
  • trapemiya さん

    コメントいただきりがとうございます。
    こちらが、初心者なので、わからないことだらけですが、意味はだいたい理解できました。
    助かります。
    Reiji Tanaka
    2009年11月29日 10:58
  • SuferOnWww さん

    MDFファイルをおいても認証に失敗していた原因は、今回のご助言にあるとおり、MDFファイルへのアクセス権が
    なかったことが原因でした。
    フルコントロールの権限を与えるとうまく利用できたことを確認できました。

    NGだった裏付けもとれて安心しました。

    ありがとうございました。
    Reiji Tanaka
    2009年11月29日 11:02