「[[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&amp;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"

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS