it技術:web開発
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| it技術:web開発 [2018/09/06 11:48] – yajuadmin | it技術:web開発 [2022/10/28 10:22] (現在) – [Tips] yajuadmin | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| ====== Web開発(ASP.NET系) ====== | ====== Web開発(ASP.NET系) ====== | ||
| - | [[http:// | + | ===== はじめに ===== |
| - | [[http:// | + | * [[http:// |
| + | | ||
| + | |||
| + | ===== IISのバージョンとWindows OS ===== | ||
| + | ^サーバーOS^クライアントOS^IIS^ | ||
| + | |Windows Server 2019| |IIS 10| | ||
| + | |Windows Server 2016|Windows 10|IIS 10| | ||
| + | |Windows Server 2012 R2|Windows 8.1|IIS 8.5| | ||
| + | |Windows Server 2012|Windows 8|IIS 8.0| | ||
| + | |Windows Server 2008 R2|Windows 7|IIS 7.5| | ||
| + | |Windows Server 2008|Windows Vista|IIS 7.0| | ||
| + | |Windows Server 2003| |IIS 6.0| | ||
| + | | |Windows XP|IIS 5.1| | ||
| + | |Windows 2000| |IIS 5.0| | ||
| ===== HTMLカラーコード ===== | ===== HTMLカラーコード ===== | ||
| - | [[http:// | + | * [[http:// |
| + | * [[https:// | ||
| ===== 画面レイアウト(Bootstrap) ===== | ===== 画面レイアウト(Bootstrap) ===== | ||
| 行 11: | 行 25: | ||
| * ライセンスは MIT License で、商用利用も可能です。 | * ライセンスは MIT License で、商用利用も可能です。 | ||
| - | ※ASP.NETのBoostrap 3.3.7は、jQuery | + | <wrap em> |
| - | 参照 | + | ==== 参照 |
| * [[http:// | * [[http:// | ||
| - | * [[http://bootstrap3.cyberlab.info/|Bootstrap3日本語リファレンス]] | + | * [[https://getbootstrap.jp/docs/4.2/ |
| * [[https:// | * [[https:// | ||
| * [[http:// | * [[http:// | ||
| 行 21: | 行 35: | ||
| ===== jQuery ===== | ===== jQuery ===== | ||
| - | 2017/03/21現在の最新版は「jQuery 3.1.1」となる。 | + | 2022/02/18現在の最新版は「jQuery 3.6.0」となる。 |
| ^1.1x系|Internet Explorer 8(IE8)の下位バージョンに対応| | ^1.1x系|Internet Explorer 8(IE8)の下位バージョンに対応| | ||
| 行 96: | 行 110: | ||
| [[http:// | [[http:// | ||
| + | ==== ビューにデータを渡す ==== | ||
| + | コントローラー側にてView(myModel)としてデータクラスを引数を渡す。 | ||
| + | |||
| + | * [[https:// | ||
| + | * [[https:// | ||
| ===== アイドル状態のワーカープロセスのスワップアウト ===== | ===== アイドル状態のワーカープロセスのスワップアウト ===== | ||
| IISのアプリケーションプールのアイドル状態のタイムアウトは20分になっている。\\ | IISのアプリケーションプールのアイドル状態のタイムアウトは20分になっている。\\ | ||
| 行 108: | 行 127: | ||
| ASP.NETアプリケーションは初回のページ呼び出しがあった時に、アプリケーションの初期処理(ビルドなど)が実施されます。そのため、ファーストユーザーがページにアクセスした時に遅いと感じることがあります。 | ASP.NETアプリケーションは初回のページ呼び出しがあった時に、アプリケーションの初期処理(ビルドなど)が実施されます。そのため、ファーストユーザーがページにアクセスした時に遅いと感じることがあります。 | ||
| - | IISのApplication Initialization機能を有効にしておくと、起動時にIISがアプリケーションを呼び出しておいてくれます。そのため最初のユーザーがアクセスした時の体感速度を向上させることができます。 | + | IIS 8.0 で標準搭載された |
| + | ==== Application Initialization ==== | ||
| + | IIS は、既定でサービス開始直後にワーカープロセスを起動しません。ユーザーからのリクエストを受けてからワーカープロセスを起動し、その中で ASP.NET の初期処理などを行っています。結果、最初にリクエストを行うユーザーは、通常時と比べて応答に時間がかかる (初期化が完了するまで待たされる) こととなります。 | ||
| + | |||
| + | この初回リクエストにかかるコストを軽減するための機能として Application Initialization が提供されており、自動的にワーカープロセスを起動させる機能と、仮想的な要求を内部的に発行し、該当の初期化処理を事前に終わらせる機能、の組み合わせで実現されています。\\ | ||
| + | [[https:// | ||
| ==== 設定 ==== | ==== 設定 ==== | ||
| - | [[http:// | + | [[http:// |
| + | |||
| + | ^アプリケーションプール設定|startMode=" | ||
| + | ^Webサイト設定|preloadEnabled=" | ||
| + | ^Web.Config|doAppInitAfterRestart はデフォルト false \\ skipManagedModules はデフォルト false| | ||
| + | |||
| + | <code xml web.config> | ||
| + | < | ||
| + | < | ||
| + | <add initializationPage="/ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | === 参照 === | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[http:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |アプリプールのリサイクル後にasp.net mvc webappをウォームアップするにはどうすればよいですか?]] | ||
| + | * [[https:// | ||
| + | |||
| + | ==== 調査 ==== | ||
| + | IIS applicationInitializationリクエストは内部で行われるため、W3Cログには表示されません。 | ||
| + | ただし、Initializer.aspxページでリクエストを確認し、ユーザーエージェントを確認すると、「IIS Application Initialization Warmup」か「IIS Application Initialization Preload」が表示されます。 | ||
| + | |||
| + | <code csharp Initializer.aspx> | ||
| + | namespace SampleWebApp | ||
| + | { | ||
| + | public partial class Initializer : System.Web.UI.Page | ||
| + | { | ||
| + | protected void Page_Load(object sender, EventArgs e) | ||
| + | { | ||
| + | // | ||
| + | System.Threading.Thread.Sleep(10000); | ||
| + | |||
| + | // ログ・ファイルerr.logへの出力ストリームを生成 | ||
| + | StreamWriter objSw = new StreamWriter( | ||
| + | Server.MapPath(" | ||
| + | true, Encoding.GetEncoding(" | ||
| + | |||
| + | // 日付、ソース・コード、エラー・メッセージ、エラー原因となった | ||
| + | // メソッドをタブ区切りテキストで記録 | ||
| + | StringBuilder objBld = new StringBuilder(); | ||
| + | objBld.Append(DateTime.Now.ToString()); | ||
| + | objBld.Append(" | ||
| + | objBld.Append(Request.UserAgent); | ||
| + | objSw.WriteLine(objBld.ToString()); | ||
| + | objSw.Close(); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | <code xml web.config> | ||
| + | < | ||
| + | < | ||
| + | <add initializationPage="/ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <code txt init.log> | ||
| + | 2020/03/04 16: | ||
| + | </ | ||
| ==== 参照 ==== | ==== 参照 ==== | ||
| 行 159: | 行 251: | ||
| これでも駄目なら、ソリューションファイルとプロジェクトを一から作り直す。 | これでも駄目なら、ソリューションファイルとプロジェクトを一から作り直す。 | ||
| + | |||
| + | ===== リソースが見つかりません ===== | ||
| + | POSTを使用すると、「リソースが見つかりません」というエラーが表示されます。\\ | ||
| + | GetSQLDataのコントローラーが見つからないか、IControllerを実装していません。 | ||
| + | |||
| + | 原因としてコントローラーの指定が間違っている。 | ||
| + | |||
| + | <code javascript 例> | ||
| + | postAjax(' | ||
| + | ↓ | ||
| + | postAjax('/ | ||
| + | </ | ||
| + | ===== 発行先だと動作しない ===== | ||
| + | Visual Studio上のWebブラウザでは動作したが、発行した環境ではエラーになる。\\ | ||
| + | Visual Studio上ではIIS Expressで動かしていた。 | ||
| + | |||
| + | ==== URL先が違う ==== | ||
| + | 開発では、localhost 直下であったが、発行した環境では、仮想ディレクトリ のエイリアス(例 Test)が付く | ||
| + | |||
| + | < | ||
| + | http:// | ||
| + | ↓ | ||
| + | http:// | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | 先頭の"/" | ||
| + | Redirect("/ | ||
| + | ↓ | ||
| + | Redirect(" | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | jQuery.ajax({ | ||
| + | url: '/ | ||
| + | ↓ | ||
| + | jQuery.ajax({ | ||
| + | url: method, | ||
| + | </ | ||
| + | |||
| + | ==== Windowsサービスの操作ができない ==== | ||
| + | Visual Studio上のWebブラウザでは動作していたので、権限の問題。 | ||
| + | |||
| + | === 対象1 === | ||
| + | IISのアプリのアプリケーションプールの詳細設定にある、「アプリケーションID」を「ApplicationPoolIdentity」から「LocalSystem」に変更する。\\ | ||
| + | Local System アカウントは Web サーバーの Administrators グループに含まれるアカウントである。 | ||
| + | [[http:// | ||
| + | |||
| + | === 対象2 === | ||
| + | IISのアプリのアプリケーションプールの詳細設定にある、「アプリケーションID」を「ApplicationPoolIdentity」のまま。 | ||
| + | web.configに「identity impersonate=" | ||
| + | |||
| + | ASP.NETにはユーザの偽装の機能があり、アクセス権が絡むときに使用する。 | ||
| + | |||
| + | <code xml web.config> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | * [[https:// | ||
| + | * [[http:// | ||
| + | * [[https:// | ||
| ===== Tips ===== | ===== Tips ===== | ||
| + | ==== 非同期POST後のリダイレクト ==== | ||
| + | jQuery.ajaxのPOSTでdataTypeをjsonにした状態で、リダイレクト(RedirectToAction)しようとするとHTMLをJSONに変換しようとしてエラーとなる。 | ||
| + | |||
| + | エラー「200 SyntaxError: | ||
| + | |||
| + | |||
| + | === 対応 === | ||
| + | Json形式でリダイレクトするURLを返し、jQuery.ajaxのPOST側でwindow.location.hrefにURLを指定してリダイレクトさせる。 | ||
| + | |||
| + | * [[https:// | ||
| + | * [[http:// | ||
| ==== Index.d.tsにてRecordが見つかりません ==== | ==== Index.d.tsにてRecordが見つかりません ==== | ||
| TypeScriptのバージョンが古いとのことで、NuGetで最新版2.9.2を入れたがエラーが解消されなかった。 | TypeScriptのバージョンが古いとのことで、NuGetで最新版2.9.2を入れたがエラーが解消されなかった。 | ||
| 行 190: | 行 358: | ||
| POST用に専用のViewModelを作成すればいい。\\ | POST用に専用のViewModelを作成すればいい。\\ | ||
| [[http:// | [[http:// | ||
| + | |||
| + | === AJax使用方法 === | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| ==== AJaxでローディング画像の表示 ==== | ==== AJaxでローディング画像の表示 ==== | ||
| 行 210: | 行 382: | ||
| </ | </ | ||
| - | ==== フォントのwoff2ファイルのMIME登録 ==== | + | ==== フォントのwoffとwoff2ファイルのMIME登録 ==== |
| - | IIS上でbootstrapのwoff2ファイルを使う際には注意が必要。デバッグ時にはエラーにならない。\\ | + | IIS上でbootstrapのwoffとwoff2ファイルを使う際には注意が必要。デバッグ時にはエラーにならない。\\ |
| - | MIMEにフォントの「woff2」の拡張子が登録されていないため取得できない旨の404エラーが出る。 | + | MIMEにフォントの「woff」と「woff2」の拡張子が登録されていないため取得できない旨の404エラーが出る。 |
| - | [[http:// | + | * [[http:// |
| + | * [[https:// | ||
| IISでMIMEの追加をすればよいが、設定忘れも考慮してWeb.configに設定を追加する方法がある。\\ | IISでMIMEの追加をすればよいが、設定忘れも考慮してWeb.configに設定を追加する方法がある。\\ | ||
| - | MVCの場合、Viewにあるweb.configに下記の設定を追加する。 | + | 直下のweb.configに下記の設定を追加する。 |
| <code xml web.config> | <code xml web.config> | ||
| < | < | ||
| < | < | ||
| + | <remove fileExtension=" | ||
| + | <mimeMap fileExtension=" | ||
| <remove fileExtension=" | <remove fileExtension=" | ||
| <mimeMap fileExtension=" | <mimeMap fileExtension=" | ||
| 行 226: | 行 401: | ||
| </ | </ | ||
| </ | </ | ||
| + | |||
| + | Windows Server 2008R2のIIS 7.5 には、「woff」と「woff2」が未登録\\ | ||
| + | Windows Server 2012R2のIIS 8.5 には、「woff2」が未登録 | ||
| + | |||
| ==== " | ==== " | ||
| 行 267: | 行 446: | ||
| </ | </ | ||
| </ | </ | ||
| + | |||
| + | ==== IE11で正しくレイアウトされない ==== | ||
| + | 互換性表示されると、IE7モードで動作する。IISログにcompatible; | ||
| + | |||
| + | 再現環境\\ | ||
| + | * インターネットオプション[接続][LANの設定][プロキシ設定]にプロキシサーバを登録。 | ||
| + | * 詳細設定から、対象のIPアドレスが例外になるように登録。 | ||
| + | * 互換表示設定で「イントラネットサイトを互換表示で表示する」チェック有り。 | ||
| + | |||
| + | 対応として、互換表示にならないように常に標準モードになる< | ||
| + | <meta http-equiv=" | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | ==== javascript のコールバック関数の引数指定 ==== | ||
| + | 関数バインディング(bind())を使う | ||
| + | |||
| + | < | ||
| + | let sayHello = function(who) { | ||
| + | alert(' | ||
| + | }; | ||
| + | |||
| + | setTimeout(sayHello.bind(null, | ||
| + | </ | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | ==== フォントアイコンの検索 ==== | ||
| + | Font Awesomeのアイコンを日本語、英語、カタカナで簡単一発検索!\\ | ||
| + | [[https:// | ||
| + | |||
it技術/web開発.1536202087.txt.gz · 最終更新: 2018/09/06 11:48 by yajuadmin
