質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
IIS

IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

2779閲覧

IIS(DockerForWindows)でC#.Netを動作させたい

kkkkui

総合スコア8

IIS

IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2021/02/03 01:51

編集2021/02/03 05:07

前提・実現したいこと

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

Docker初心者です。
ローカル端末にDockerを2つ立ち上げて、
1つはWebサーバ役としてIIS(Docker)
もう1つはDBサーバ役としてSQLServer(Docker)とし
ホストからIEでC#.netで作成したサイトを参照したいです。

今詰まっているのは、Docker(IIS)を立ち上げると
簡単なsample.htmlやsample.aspxはIE上から参照できるようになったのですが、
VisualStudioでビルドしたtestプロジェクトを参照しようとすると
IEの画面にエラーが表示されます。

Web.configの記載がまずいのかと記載方法を変えたりと
苦慮していますがエラーが出る状況です。
修正ポイントがまずいのでしょうか?
ご教授くださいますようお願い致します。

Web.config①~③で動作させたときのエラー①~③が以下です。
Web.config①…VisualStudioで単純にビルド
Web.config②…本番環境で動いているWeb.configからDB設定などを除去したもの
Web.config③…エラー②の指摘箇所を除去したもの

IISDockerのファイル構成

C:\inetpub\wwwroot
□□┗sample
□□□□┗sample.aspx
□□□□┗sample.html
□□┗test
□□□□┗bin
□□□□┗test.aspx
□□□□┗Web.config

ソースコード(Web.config①)

<?xml version="1.0" encoding="utf-8"?> <!-- ASP.NET アプリケーションの構成方法の詳細については、 https://go.microsoft.com/fwlink/?LinkId=169433 を参照してください --> <configuration> <system.web> <customErrors mode="Off" /> <compilation targetFramework="4.0" /> </system.web> </configuration>

発生しているエラー①

'/' アプリケーションでサーバー エラーが発生しました。 パーサー エラー 説明: この要求の処理に必要なリソースの解析中にエラーが発生しました。以下の解析エラーの詳細を確認し、ソース ファイルに変更を加えてください。 パーサー エラー メッセージ: 型 'test.test' を読み込めませんでした。 ソース エラー: 行 1: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test.aspx.cs" Inherits="test.test" %> 行 2: 行 3: <!DOCTYPE html> ソース ファイル: /test/test.aspx 行: 1 バージョン情報: Microsoft .NET Framework バージョン:4.0.30319; ASP.NET バージョン:4.8.4250.0

ソースコード(Web.config②)

<?xml version="1.0" encoding="utf-8"?> <configuration> <system.web> <customErrors mode="Off" /> <compilation targetFramework="4.0" /> <authorization> <deny users="?" /> <allow users="*" /> </authorization> <trust level="Full" originUrl="" /> <webServices> <protocols> <add name="HttpSoap" /> <add name="HttpGet" /> <add name="HttpPost" /> </protocols> </webServices> </system.web> <system.webServer> <modules runAllManagedModulesForAllRequests="true" /> </system.webServer> </configuration>

発生しているエラー②

'/' アプリケーションでサーバー エラーが発生しました。 構成にエラーがあります。 説明: この要求を処理するために必要な構成ファイルの処理中にエラーが発生しました。以下のエラーの詳細を確認し、構成ファイルに変更を加えてください。 パーサー エラー メッセージ: アプリケーション レベルを超えて allowDefinition='MachineToApplication' として登録されているセクションを使うことはできません。このエラーは、仮想ディレクトリが IIS でアプリケーションとして構成されなかった場合に発生します。 ソース エラー: 行 8: <allow users="*" /> 行 9: </authorization> 行 10: <trust level="Full" originUrl="" /> 行 11: <webServices> 行 12: <protocols> ソース ファイル: C:\inetpub\wwwroot\test\web.config    行: 10 バージョン情報: Microsoft .NET Framework バージョン:4.0.30319; ASP.NET バージョン:4.8.4250.0

ソースコード(Web.config③)

<?xml version="1.0" encoding="utf-8"?> <configuration> <system.web> <customErrors mode="Off" /> <compilation targetFramework="4.0" /> <authorization> <deny users="?" /> <allow users="*" /> </authorization> <webServices> <protocols> <add name="HttpSoap" /> <add name="HttpGet" /> <add name="HttpPost" /> </protocols> </webServices> </system.web> <system.webServer> <modules runAllManagedModulesForAllRequests="true" /> </system.webServer> </configuration>

発生しているエラー③

'/' アプリケーションでサーバー エラーが発生しました。 アクセスが拒否されました。 説明: この要求の処理に必要なリソースにアクセスしようとしてエラーが発生しました。要求された URL へのアクセスがサーバーで構成されていない可能性があります。 エラー メッセージ 401.2: 許可されていません: サーバー構成によりログオンに失敗しました。指定された資格情報に基づいてこのディレクトリまたはページを表示するためのアクセス許可があること、および認証方法が Web サーバーで有効になっていることを確認してください。詳細については、Web サーバーの管理者に問い合わせてください。 バージョン情報: Microsoft .NET Framework バージョン:4.0.30319; ASP.NET バージョン:4.8.4250.0

試したこと

ホストのIISでも同じ現象が出るか試すと
エラー①は異なりましたが、エラー②③は同現象でした。

ちなみにVisualStudioでのビルドの手順は以下です。
1.新しいプロジェクト作成
2.「asp.net Webアプリケーション(.net framework)」を選択
3.プロジェクト名、ソリューション名共に「test」

補足情報(FW/ツールのバージョンなど)

Microsoft Visual Studio Solution File, Format Version 12.00
VisualStudioVersion = 16.0.29020.237

以下を参考にdocker環境作成
https://www.kinakomotitti.net/entry/2018/02/06/084222

ソースコード(test.aspx)

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test.aspx.cs" Inherits="test.test" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div> TESTフォーム!!! </div> </form> </body> </html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/02/03 02:27

Docker とかは自分は触ったこともないので IIS それとの違いがある場合はお役に立てませんが・・・ > ホストのIISでも同じ現象が出るか試すと > エラー①は異なりましたが、エラー②③は同現象でした。 「ホストのIIS」とは何ですか? 開発マシンのローカルの IIS のことですか? それならそこで動かないと話にならないので、まずそこで動くようにしてみませんか?
kkkkui

2021/02/03 03:37 編集

ご回答ありがとうございます。 >「ホストのIIS」とは何ですか? 開発マシンのローカルの IIS のことですか? 開発マシンのローカルIISのことです。 やはりそうですよね。 DockerIISと同時にローカルIISでも同じ確認を行っており、 エラー②③は双方で同じエラーが表示されました。 ローカルIISではエラー①は ================================= '/' アプリケーションでサーバー エラーが発生しました。 パーサー エラー 説明: この要求の処理に必要なリソースの解析中にエラーが発生しました。以下の解析エラーの詳細を確認し、ソース ファイルに変更を加えてください。 パーサー エラー メッセージ: 型 'test.test' を読み込めませんでした。 ソース エラー: 行 1: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test.aspx.cs" Inherits="test.test" %> 行 2: 行 3: <!DOCTYPE html> ソース ファイル: /test1/test.aspx 行: 1 バージョン情報: Microsoft .NET Framework バージョン:4.0.30319; ASP.NET バージョン:4.8.4250.0 ================================= というエラーが表示されていました。 引き続き、ローカルIISと同時進行で確認を続けます。
退会済みユーザー

退会済みユーザー

2021/02/03 04:02 編集

デフォルトで customErrors mode="RemoteOnly" なので、① でローカル IIS の時は mode="RemoteOnly" に該当して(リモートではないとみなされて)カスタムエラーではなく詳細エラーメッセージが表示されたのです。 Docker の場合はどうなっているのか分かりません。質問に書いてあった結果から想像すると、リモートとみなされてカスタムエラーが表示された(詳細エラーメッセージが表示されなかった)ということではないかと思います。そうだとすると、mode="Off" にすると Docker の場合も「型 'test.test' を読み込めませんでした」という同じ結果になるのでは?
kkkkui

2021/02/03 05:08 編集

ご回答ありがとうございます。 おっしゃる通りで、DockerのWeb.config①に「<customErrors mode="Off" />」を追加すると ローカルIISと同じ「型 'test.test' を読み込めませんでした」エラーが表示されました。 質問文のWeb.config①、エラー①を修正させて頂きました。
退会済みユーザー

退会済みユーザー

2021/02/03 06:23

② と ③ の web.config にある authorization とか trust は何を意図してるのですか? 訳が分からないままいろいろ付けたり外したりして試しているように見えますが、とするとはっきり言ってそれらは無用(と言うより余計なものを付けて問題を招いているよう)です。 ① に集中して、まずローカル IIS で動くようにすることをお勧めします。ASP.NET が有効になっているのか、web アプリケーションプロジェクトなら Visual Studio でコンパイルしたアセンブリは bin フォルダに含まれているかなど、調べることは多々ありそうです。
kkkkui

2021/02/03 06:58 編集

多くのネット上の手順書に記載されているweb.config①を試し、 ①でダメだったので本番環境で動いているweb.config②はどうかと試し、 ②で出たエラーを基にweb.config③を作成した、、という経緯です。 ご指摘の通りで、①~③共にエラー内容が異なるので、混乱しておりました。 アドバイス通り①に集中して問題解決に向かえればと思います。 ①のエラーで色々と検索したところ、「アプリケーションへ変換しなければならない」 という情報が載っていました。 「管理ツール->インターネットインフォメーションサービス(IIS)…」で testフォルダを「アプリケーションへの変換」でアプリケーションに変換したところ、 ローカルIISのtest.aspxを参照することができるようにはなりました。 本来このような手順は必要なのでしょうか? DockerIISの構築手順書(ネット上)には そのような手順を記載しているサイトが無かったため DockerIISでもそのような変換を行えるかどうかもわかりませんが その方向で調べてみます。 (進捗ありましたら追記いたします。 方向性間違っていましたらさらなるご指摘いただけると幸いです。)
退会済みユーザー

退会済みユーザー

2021/02/03 07:15 編集

> ①のエラーで色々と検索したところ、「アプリケーションへ変換しなければならない」という情報が載っていました。 サイトを追加する場合と、サイトの下にアプリケーションを追加する場合があって、後者の場合はそういうこと(というより最初からアプリケーションとして追加するのが普通)になります。 Docker の場合は触ったこともないので分かりません。 ところで、ローカル IIS を使えば済むのに、なぜ Dockerとか を使っているのでしょう? 勉強のためですか?
kkkkui

2021/02/03 07:29

ご回答ありがとうございます。 >最初からアプリケーションとして追加するのが普通 また一つ勉強になりました。 今回はVisualStudioでの発行手順は、 「発行先を選択:フォルダー->フォルダまたはファイル共有:(任意パスでtestフォルダ)->発行」 という手順で発行し、発行されたtestフォルダを「C:\inetpub\wwwroot」配下に移動させました。 このような手順だったので、"アプリケーションへ変換"しなければならなかったのですね。 ひとまずローカルIISで実現できたようなので DockerIISにもあてがってみます。 (進捗ありましたら追記いたします。)
退会済みユーザー

退会済みユーザー

2021/02/03 07:44 編集

> 今回はVisualStudioでの発行手順は、「発行先を選択:フォルダー->フォルダまたはファイル共有:(任意パスでtestフォルダ)->発行」という手順で発行し、発行されたtestフォルダを「C:\inetpub\wwwroot」配下に移動させました。このような手順だったので、"アプリケーションへ変換"しなければならなかったのですね。 移動させる必要はなくて、そのフォルダをアプリケーションに設定するだけで済むはずです。。アプリケーションのフォルダ/ファイルを wwwroot 下に置く必要はありません。 そもそもローカル IIS が相手なら発行する必要もなくて、Visual Studio のプロジェクトのフォルダをそのまま IIS のサイトまたはアプリケーションに設定し、Users とワーカープロセスにアクセス権を与えれば済みます。 IIS 関係の本を買ってくるなどして IIS の基本的なことを勉強することをお勧めします。Docker とかはその後にすべきと思いますけど。
kkkkui

2021/02/08 01:48

SuferOnWww様 ご回答ありがとうございました。 お陰様で、ローカルIISでの設定ではASP.netが動作するようになりました。 これをどうやってDockerで同じように動かすか…なのですが、 それを実現させるには質問内容が漠然としすぎておりますので 1つ1つ問題解決できるよう再質問として別で投稿させて頂きます。 迷走中の漠然とした質問に関わらず、 正しい考え方を導いて下さりありがとうございました。
guest

回答1

0

自己解決

エラー【1】の状態で
「管理ツール->インターネットインフォメーションサービス(IIS)…」で
testフォルダを「アプリケーションへの変換」でアプリケーションに変換したところ、
ローカルIISのtest.aspxを参照することができるようにはなりました。

Docker以前の問題でしたので
回答者様のアドバイスを参考に、
ひとまずローカルIISで動かすことを目標にし、
結果、ローカルIISでC#.netが動作する所まで行きつきました。

これをどうDockerIISとして動かすか、、なのですが
インターネットインフォメーションサービス(IIS)マネージャー等の
細かな設定が必要になってきますので、
それらの設定がDockerで可能なのか再質問させて頂きます。

投稿2021/02/08 01:55

kkkkui

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問