「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>FAQ]] --[[P層フレームワーク>FAQ - P層フレームワーク]] --[[B層フレームワーク>FAQ - B層フレームワーク]] --[[D層フレームワーク>FAQ - D層フレームワーク]] --[[大規模案件導入>FAQ - 大規模案件導入]] --その他 *目次 [#o9dd7074] #contents *ASP.NET [#z979e211] **ASP.NETのweb.config、app.configへの変更の反映タイミングが解らない。 [#p4abcf8b] 反映には、IISの再起動が必要です。 -web.configが変更されると、自動的にIISの再起動がかかり、直ちに変更が反映されます。 -しかし、app.configの変更ではIISが再起動しないので、iisresetコマンドを使用して手動で変更を反映する必要があります。 -※ ASP.NET開発用Webサーバを使用している場合は、上記IISをASP.NET開発用Webサーバに読み換える。 **sessionStateのmodeの初期値をStateServerにしている理由 [#u536b2b7] -StateServer、SQLServerなどのモードを使用するには、~ Sessionに格納するオブジェクトが、[Serializable]にマークされている必要がある。 -InProcで開発を進めてしまうと、[Serializable]でない、オブジェクトをSessionに格納し、~ 運用中の切替ができなくなることを想定し、Open棟梁のテンプレートでは、StateServerを既定値にしている。 -選択 --本番運用環境で、クラスタリングなどが必要になり得るようなら、開発時は、mode="StateServer"の設定がオススメ。 --そのようなことが無いと言い切れる場合は、mode="InProc"に変更してもトラブらない。 **Forms認証ログイン前にJSファイルなどを参照できない。 [#i36ccaf4] -Forms認証で、左記現象が発生することを確認しました。 -これを回避するには、web.configのセクションに、以下の定義を追加する必要があります。 <!-- JavaScript ファイルを認証対象外にする --> <location path="Framework/Js"> <system.web> <authorization> <allow users="*"/> </authorization> </system.web> </location> **予期せぬSessionタイムアウトが発生する。 [#j208bca0] -IIS では、特定のワーカープロセスのアイドル状態が続くと自動的にそのワーカープロセスがシャットダウンされるようです。~ このワーカープロセスのアイドルタイムアウトの既定値は 20 分です。 -従って、ASP.NET の画面操作後、20 分以上、誰からもその Web アプリケーションにアクセスがなかった場合、~ 上ワーカープロセスが強制的にシャットダウンされ、セッションの状態が破棄されてしまう可能性があります。 -アイドルタイムアウトの設定は、IIS 管理ツールで行います。 --アプリケーション プールのアイドル タイムアウト設定を構成する (IIS 7)~ http://technet.microsoft.com/ja-jp/library/cc771956(v=ws.10).aspx -また、セッションの状態が失われる条件が、以下サイトにまとまっていますので、合わせてご紹介いたします。 --Losing Session State (英語)~ http://stackoverflow.com/questions/3515947/losing-session-state **ASP.NETから共有フォルダにアクセスできない。 [#ad832f12] 共有フォルダへのアクセス権付与が必要です。 -ADを導入してる場合、マシンアカウントにアクセス権を付与できます。 -また、IISのワーカープロセスのアカウントを変更することで対応可能です。 上記を実施できない場合は、ASP.NETの偽装か区間偽装を推奨します。 余談: -ネットワークドライブは、偽装アカウントで認識されていないことがある。 -サービスアカウントはログインしないこともあるので。 **ASP.NETからEXE起動したプロセスにアクセス権が無い。 [#w3c3acdd] -偽装アカウントからEXEを起動した場合、EXEの実行アカウントは偽装アカウントになりません。 -EXEの実行アカウントは偽装アカウントにする場合、以下のように処理を実装する必要があります。 bool ret; string cmdNotepad = Environment.GetEnvironmentVariable( "SystemRoot", EnvironmentVariableTarget.Process) + @"\system32\notepad.exe"; // 通常起動 Process.Start(cmdNotepad); // 偽装起動 // ・ASP.NET偽装や、ImpersonateValidUserの偽装レベルはSecurityImpersonationなので、これに合わせる必要がある。 // ・独自偽装の、偽装レベルは、SecurityImpersonation、SecurityDelegationどちらでも良いが、双方を合わせる必要がある。 // ・実行アカウントには、「プロセス レベル トークンの置き換え」セキュリティ・ポリシー設定が必要になる。 ret = IdentityImpersonation.CreateProcessAsImpersonationUser(cmdNotepad, ""); -IdentityImpersonationクラスはOpen棟梁の提供する部品です。~ **偽装方式 [#q2e60c6b] -ASP.NET アプリケーションに偽装を実装する方法~ http://support.microsoft.com/kb/306158/ja ***ASP.NETの偽装 [#pb72d2b1] -ベース クライアント セキュリティ モデルでの偽装 --<identity impersonate="true" /> -特定のユーザ アカウントを偽装 --<identity impersonate="true" userName="accountname" password="password" /> ***区間偽装のサンプル [#o4c2dda7] try { // コードの特定部分を実行するときのみ、任意のユーザを偽装する。 // 偽装して ii = new IdentityImpersonation(); ret = ii.ImpersonateValidUser("x", "", "x"); // 偽装アカウントでの処理 // 存在チェック this.lblElse.Text += string.Format("、偽装後(任意のユーザ「{0}」を偽装):", WindowsIdentity.GetCurrent().Name) + ResourceLoader.LoadAsString(@"c:\test.txt", Encoding.GetEncoding(CustomEncode.UTF_8)); } catch (Exception ex) { Debug.WriteLine(ex.Message); } finally { // 偽装解除 ret = ii.UndoImpersonation(); } -IdentityImpersonationクラスはOpen棟梁の提供する部品です。~ *ログ出力機能 [#vdf7fa51] **ログ出力フォーマットをカスタマイズ可能か? [#y276eb21] 可能です。 -ログ出力フォーマットはカスタマイズ可能レイヤである[[ベースクラス2]]で定義されています。 -以下のケースで、上記処理を案件ごとにカスタマイズして下さい。 --例外固有のプロパティをログ出力する場合 --例外のダンプをする場合(Exception.ToString(), [[Objectダンプ部品>https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Util/ObjectInspector.cs]]) **ログ出力機能に於いて、1系 ⇔ 2系と言ったローリングを実現可能か? [#p859c697] ログ出力機能は、log4netの機能を使用しておりますので、~ log4netの類似機能(MaxSizeRollBackups、CountDirection)で代替下さい。 **複数のプロセスから1つのファイルに書き込み可能か? [#paca5d2b] -MinimalLockが利用できる。 <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> -しかし、以下の問題は、発生し得る。 --単純にファイルのOpen - Closeを繰り返すだけ~ なので、性能とロックの懸念があり、問題に成り得る。 --問題に成り得るケースでは、[[アペンダ種類>ログ出力方式#v2ffec90]]を俯瞰すると、~ --問題に成り得るケースでは、[[アペンダ種類>ログ出力方式 (lon4net)#v2ffec90]]を俯瞰すると、~ EventLogAppender、AdoNetAppenderやSyslogAppender~ などの利用を検討すると良いかと思う(が、既知の利用実績は無い)。 **ログ出力機能に於いて、ユーザやプロセス毎に異なるファイル出力が可能か? [#f28528c4] ***ユーザ [#bd3f9f12] -リッチクライアント(特にターミナルサービス)の場合、~ log4netの機能を使用し、ログイン ユーザ毎にログ出力先を変更できます。 -具体的には、ファイル出力のアペンダ設定に <param name="File" value="${USERPROFILE}?Log?ACCESS" /> >と記述すればOKです(USERPROFILEはログイン ユーザ毎に異なる環境変数値)。 ***プロセス [#e51a8fa6] [[前述>#bd3f9f12]]のように、環境変数で設定可能なので、~ 例えば、バッチならProgram.main()メソッドの冒頭等で、~ 環境変数を設定すればイケるのでは?と思います。 **ログ出力のコントロールが可能か? [#g5a6f039] ***フィルタでコントロール [#k2f95156] log4netの仕様を確認すると、以下のようになっているようなので、~ Loggerのlevelにフィルタ設定すれば、一番性能的に良いと思います。 - Loggers ---> Logger ---> (level) ---> Appenders ---> Appender ---> (level) -> Output └-> RootLogger ---> Appender ---> (level) ---> Output ***プログラムからコントロール [#o67082c8] プログラムからコントロールする場合は、~ LogIFの「ログ レベル情報取得インターフェイス」を使用してください。~ https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Log/LogIF.cs#L116 *リッチ クライアント [#lc3cc172] **リッチ クライアントの定義ファイルの保存先に、ユーザ毎に異なるディレクトリを指定可能か? [#u038dab3] -リッチクライアント(WindowsForms、WPF、ClickOnce、XBAP、ターミナルサービス)の場合、環境変数を使用してデータ保存先を選択できます。 -具体的には、リソースローダ部品のパスに"%USERPROFILE%?AppData"と指定すればOKです(USERPROFILEはログイン ユーザ毎に異なる環境変数値)。 *[[通信制御機能]] [#ea73a251] **プロキシ経由やプロキシ認証をサポートしているか? [#ge166088] -サポートしています。 -プロキシへのURLやCredentialsをXML定義ファイルに指定可能です。 -また、これらをAPIから直接指定することも可能です。 **Windows認証を使用したSSOをサポートしているか? [#y1675add] -サポートしています。 -ケルベロス認証をサポートしていますので、ベース クライアント セキュリティ モデルに於ける~ ダブル~トリプル ホップも可能です(ただし、ベース クライアント セキュリティ モデルは通常推奨しない方式です)。 **TCP/IPなどの通信プロトコルはサポートしているか? [#h5d49b94] -サポートしています。 -サービス インターフェイス、サービス プロキシを追加開発することで対応可能です。 -同様に、他の未サポートのプロトコルも追加開発により対応可能です。 *テスト [#q2d87c9a] (Open棟梁の)テストに関するいろいろ。 **パフォーマンス・テスト [#k1a2a7e6] -性能問題のポイント - マイクロソフト系技術情報 Wiki~ https://techinfoofmicrosofttech.osscons.jp/index.php?%E6%80%A7%E8%83%BD%E5%95%8F%E9%A1%8C%E3%81%AE%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88 -データアクセスの性能 --バッチ・サンプルの性能測定に使用した、各種リソース情報と、その測定結果。 ---(1)~ https://gist.github.com/daisukenishino2/5402109ba92be11f26058e163a1a770a ---(2)~ https://gist.github.com/daisukenishino2/6ab8fd7a9f6eb0c32782c73dc95c3f27 --動的パラメタライズド・クエリの性能測定に使用した、各種リソース情報と、その測定結果。~ https://gist.github.com/daisukenishino2/c2da7b9fadf79c2ba7bcbfe01a73aea4 **[[負荷テストのポイント]] [#g406fc5f] **[[脆弱性対策のポイント]] [#bd304571] **[[テスト自動化について]] [#n8861fcc] **[[NuGet導入、NuGet登録]] [#t33423c7] ***[[NuGet導入後のデバッグ方法]] [#v116ec15] ***[[NuGetからローカルに切り替える。]] [#p873c57b] *その他 [#t9987249] **改元対応 [#s69d369a] -Open棟梁の改元対応 - Google グループ~ https://groups.google.com/forum/#!topic/opentouryoproject/tYrRJ1ExgzE **.Net Framework ClientProfile で動作&コンパイルできない。 [#a4ba57d2] Client Profileはサポートしていません。 -理由 --Client Profileは4.5でドロップされるようなので。 --Client Profileでは存在しないサーバサイドAPIを多数使用しているため。 .NET Framework Client Profile http://msdn.microsoft.com/ja-jp/library/vstudio/cc656912.aspx .NET Framework 4.5 以降では、Client Profile が中止され、 完全な再頒布可能パッケージのみが使用できます。 今まではdefect(欠陥)か?とも考えていましたが、 上記理由で、今後のClient Profileへの対応予定はありません。 (また、Client Profile前提の開発も、あまりお勧めしません) IP:210.234.63.131 TIME:"2020-08-02 (日) 00:32:45" REFERER:"https://opentouryo.osscons.jp/index.php?cmd=edit&page=FAQ%20-%20%E3%81%9D%E3%81%AE%E4%BB%96" USER_AGENT:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"