/// <summary>フォーム クローズドのUOCメソッド(共通)</summary> /// <remarks> /// 実装必須 /// 画面コード親クラス1から利用される派生の末端 /// </remarks> protected override void UOC_CMNFormEnd() { // フォーム クローズドに実行する処理を実装する // TODO: string eventName = FxLiteral.EVENT_FORM_CLOSED; // ACCESSログ出力 ---------------------------------------------- if (MyBaseControllerWin.CanOutPutLog) { // ------------ // メッセージ部 // ------------ // ユーザ名, レイヤ, 画面名, コントロール名 // ------------ string strLogMessage = "," + UserInfo.UserName + "," + "-" + "," + this.Name + "," + eventName; // Log4Netへログ出力 LogIF.InfoLog("ACCESS", strLogMessage); } // ------------------------------------------------------------- }
/// <summary> /// Stop the asynchronous service and Waits to complete all worker thread to complete. /// </summary> public void StopAsyncProcess() { // Breaks the infinite loop of Main thread. this._infiniteLoop = false; // Wait the end of the main thread. this._mainThread.Join(); // Update stop command to all the running asynchronous task AsyncProcessingServiceParameterValue asyncParameterValue = new AsyncProcessingServiceParameterValue("AsyncProcessingService", "StopAllTask", "StopAllTask", "SQL", new MyUserInfo("AsyncProcessingService", "AsyncProcessingService")); asyncParameterValue.StatusId = (int)AsyncProcessingServiceParameterValue.AsyncStatus.Processing; asyncParameterValue.CommandId = (int)AsyncProcessingServiceParameterValue.AsyncCommand.Stop; LayerB layerB = new LayerB(); AsyncProcessingServiceReturnValue asyncReturnValue = (AsyncProcessingServiceReturnValue)layerB.DoBusinessLogic( (BaseParameterValue)asyncParameterValue, DbEnum.IsolationLevelEnum.ReadCommitted); if (asyncReturnValue.ErrorFlag) { LogIF.ErrorLog("ASYNC-SERVICE", "ErrorMessageID: " + asyncReturnValue.ErrorMessageID + "ErrorMessage: " + asyncReturnValue.ErrorMessage); } // Wait for all worker thread to be complete LogIF.InfoLog("ASYNC-SERVICE", GetMessage.GetMessageDescription("I0004")); while (this._workerThreadCount != 0) { // Wait for the completion of the worker thread. Thread.Sleep(this._numberOfSeconds * 1000); } // Log after completing all worker threads LogIF.InfoLog("ASYNC-SERVICE", GetMessage.GetMessageDescription("I0008")); }
/// <summary> /// アクション メソッドの呼び出し後に呼び出されます。 /// Controller.OnActionExecuted メソッド (System.Web.Mvc) /// http://msdn.microsoft.com/ja-jp/library/system.web.mvc.controller.onactionexecuted.aspx /// </summary> /// <param name="filterContext"> /// 型: System.Web.Mvc.ActionExecutedContext /// 現在の要求およびアクションに関する情報。 /// </param> protected override void OnActionExecuted(ActionExecutedContext filterContext) { // Calling base class method. base.OnActionExecuted(filterContext); // 性能測定終了 this.perfRec.EndsPerformanceRecord(); // ------------ // メッセージ部 // ------------ // ユーザ名, IPアドレス, // レイヤ, 画面名, コントロール名, 処理名 // 処理時間(実行時間), 処理時間(CPU時間) // エラーメッセージID, エラーメッセージ等 // ------------ string strLogMessage = "," + this.UserInfo.UserName + "," + this.UserInfo.IPAddress + "," + "<-----" + "," + this.ControllerName + "," + this.ActionName + "(OnActionExecuted)" + "," + perfRec.ExecTime + "," + perfRec.CpuTime; LogIF.InfoLog("ACCESS", strLogMessage); }
/// <summary>開始処理</summary> protected override void UOC_Pre() { // ACCESSログ出力 ---------------------------------------------- if (MyBaseAsyncFunc.CanOutPutLog) { // ------------ // メッセージ部 // ------------ // ユーザ名, レイヤ, 画面名, コントロール名, // 処理時間(実行時間), 処理時間(CPU時間) // エラーメッセージID, エラーメッセージ等 // ------------ string strLogMessage = "," + "-" + "," + "-----*" + "," + this.UIElementName + "," + this.AsyncFunc.Method.Name; // Log4Netへログ出力 LogIF.InfoLog("ACCESS", strLogMessage); } // ------------------------------------------------------------- // 性能測定開始 this.perfRec = new PerformanceRecorder(); this.perfRec.StartsPerformanceRecord(); }
/// <summary> /// 応答にビューを表示する ViewResult オブジェクトを作成します。 /// Controller.View メソッド (System.Web.Mvc) /// http://msdn.microsoft.com/ja-jp/library/system.web.mvc.controller.view.aspx /// </summary> /// <param name="viewName">ビュー名</param> /// <param name="masterName">マスター ページ名</param> /// <param name="model">モデル</param> /// <returns>ViewResult オブジェクト</returns> protected override ViewResult View(string viewName, string masterName, object model) { ViewResult vr = base.View(viewName, masterName, model); string[] temp = vr.ViewName.Split('.'); // ------------ // メッセージ部 // ------------ // ユーザ名, IPアドレス, // レイヤ, 画面名, コントロール名, 処理名 // 処理時間(実行時間), 処理時間(CPU時間) // エラーメッセージID, エラーメッセージ等 // ------------ string strLogMessage = "," + this.UserInfo.UserName + "," + this.UserInfo.IPAddress + "," + "----->>" + "," + this.ControllerName + "," + this.ActionName + " -> " + temp[temp.Length - 1]; LogIF.InfoLog("ACCESS", strLogMessage); return(vr); }
/// <summary> /// アクション メソッドの呼び出し後に発生します。 /// https://msdn.microsoft.com/ja-jp/library/dn573277.aspx /// </summary> /// <param name="actionExecutedContext">HttpActionExecutedContext</param> /// <param name="cancellationToken">CancellationToken</param> public override async Task OnActionExecutedAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken) { // Calling base class method. await base.OnActionExecutedAsync(actionExecutedContext, cancellationToken); // 性能測定終了 this.perfRec.EndsPerformanceRecord(); // ------------ // メッセージ部 // ------------ // ユーザ名, IPアドレス, // レイヤ, 画面名, コントロール名, 処理名 // 処理時間(実行時間), 処理時間(CPU時間) // エラーメッセージID, エラーメッセージ等 // ------------ // Claimを取得する。 string userName, roles, scopes, ipAddress; MyBaseAsyncApiController.GetClaims(out userName, out roles, out scopes, out ipAddress); string strLogMessage = "," + userName + //this.UserInfo.UserName + "," + ipAddress + //this.UserInfo.IPAddress + "," + "<-----" + "," + this.ControllerName + "," + this.ActionName + "(OnActionExecuted)" + "," + perfRec.ExecTime + "," + perfRec.CpuTime; LogIF.InfoLog("ACCESS", strLogMessage); }
/// <summary>フレームワークの対象コントロールイベントの終了処理を実装</summary> /// <param name="rcFxEventArgs">イベントハンドラの共通引数</param> /// <remarks>画面コード親クラス1から利用される派生の末端</remarks> protected override void UOC_AfterAction(RcFxEventArgs rcFxEventArgs) { // フレームワークの対象コントロールイベントの終了処理を実装する // TODO: // 性能測定終了 this.perfRec.EndsPerformanceRecord(); // ACCESSログ出力 ---------------------------------------------- if (MyBaseControllerWin.CanOutPutLog) { // ------------ // メッセージ部 // ------------ // ユーザ名, レイヤ, 画面名, コントロール名, // 処理時間(実行時間), 処理時間(CPU時間) // エラーメッセージID, エラーメッセージ等 // ------------ string strLogMessage = "," + UserInfo.UserName + "," + "<-----" + "," + this.Name + "," + rcFxEventArgs.ControlName + "," + perfRec.ExecTime + "," + perfRec.CpuTime; // Log4Netへログ出力 LogIF.InfoLog("ACCESS", strLogMessage); } // ------------------------------------------------------------- }
/// <summary> /// B層の開始処理を実装 /// </summary> /// <param name="parameterValue">引数クラス</param> /// <remarks>業務コード親クラス1から利用される派生の末端</remarks> protected override void UOC_PreAction(BaseParameterValue parameterValue) { // ACCESSログ出力----------------------------------------------- MyParameterValue myPV = (MyParameterValue)parameterValue; // ------------ // メッセージ部 // ------------ // ユーザ名, IPアドレス, レイヤ, // 画面名, コントロール名, メソッド名, 処理名 // ------------ string strLogMessage = "," + myPV.User.UserName + "," + myPV.User.IPAddress + "," + "----->>" + "," + myPV.ScreenId + "," + myPV.ControlId + "," + myPV.MethodName + "," + myPV.ActionType; // Log4Netへログ出力 LogIF.InfoLog("ACCESS", strLogMessage); // ------------------------------------------------------------- // 性能測定開始 this.perfRec = new PerformanceRecorder(); this.perfRec.StartsPerformanceRecord(); }
/// <summary> /// B層の終了処理を実装 /// </summary> /// <param name="parameterValue">引数クラス</param> /// <param name="returnValue">戻り値クラス</param> /// <remarks>業務コード親クラス1から利用される派生の末端</remarks> protected override void UOC_AfterAction(BaseParameterValue parameterValue, BaseReturnValue returnValue) { // 性能測定終了 this.perfRec.EndsPerformanceRecord(); // ACCESSログ出力----------------------------------------------- MyParameterValue myPV = (MyParameterValue)parameterValue; // ------------ // メッセージ部 // ------------ // ユーザ名, IPアドレス, レイヤ, // 画面名, コントロール名, メソッド名, 処理名 // 処理時間(実行時間), 処理時間(CPU時間) // ------------ string strLogMessage = "," + myPV.User.UserName + "," + myPV.User.IPAddress + "," + "<<-----" + "," + myPV.ScreenId + "," + myPV.ControlId + "," + myPV.MethodName + "," + myPV.ActionType + "," + this.perfRec.ExecTime + "," + this.perfRec.CpuTime; // Log4Netへログ出力 LogIF.InfoLog("ACCESS", strLogMessage); // ------------------------------------------------------------- }
/// <summary>SQL実行終了処理を実装する共通UOCメソッド(正常時)</summary> /// <param name="sql">実行したSQLの情報</param> /// <remarks>データ アクセス親クラス1から利用される派生の末端</remarks> protected override void UOC_AfterQuery(string sql) { // 性能測定終了 this.perfRec.EndsPerformanceRecord(); // SQLトレースログ出力 // ------------ // メッセージ部 // ------------ // 処理時間(実行時間), 処理時間(CPU時間), 実行したSQLの情報 // ------------ string strLogMessage = this.perfRec.ExecTime + "," + this.perfRec.CpuTime + "," + sql; // Log4Netへログ出力 string sqlTracelog = GetConfigParameter.GetConfigValue(PubLiteral.SQL_TRACELOG); if (sqlTracelog == null || sqlTracelog == "") { // SQLトレースログ(OFF) } else if (GetConfigParameter.GetConfigValue(PubLiteral.SQL_TRACELOG).ToUpper() == PubLiteral.ON) { LogIF.InfoLog("SQLTRACE", strLogMessage); } else if (GetConfigParameter.GetConfigValue(PubLiteral.SQL_TRACELOG).ToUpper() == PubLiteral.OFF) { // SQLトレースログ(OFF) } else { // パラメータ・エラー(書式不正) throw new ArgumentException( String.Format(PublicExceptionMessage.SWITCH_ERROR, PubLiteral.SQL_TRACELOG)); } // --- // 以下も、ログ出力で使用可能 object obj = null; // UOC_Connection等で情報を設定しておく。 // UserInfoなどの情報を想定している。 obj = this.GetDam().Obj; // SQL実行時に情報が自動設定される。 // ・ExecSelectFill_DT // DataTable // ・ExecSelectFill_DS // DataSet // ・ExecSelect_DR // IDataReader // ・ExecSelectScalar // object // ・ExecInsUpDel_NonQuery // int obj = this.LogInfo; }
/// <summary>初期化処理</summary> protected void Page_Load(object sender, EventArgs e) { // 親画面の画面GUIDを設定(QueryString)から取得 string parentScreenGuid = (string)Request.QueryString[FxHttpQueryStringIndex.PARENT_SCREEN_GUID]; // メッセージIDとメッセージをセッションより取得し、設定 this.lblmessage.Text = (string)Session[parentScreenGuid + FxHttpSessionIndex.MODAL_DIALOG_MESSAGE]; this.lblmessageID.Text = (string)Session[parentScreenGuid + FxHttpSessionIndex.MODAL_DIALOG_MESSAGEID]; // タイトル設定 this.Title = (string)Session[parentScreenGuid + FxHttpSessionIndex.MODAL_DIALOG_NAME]; // アイコンへのパスを取得 string iconPath; // 選択入力を促すアイコン(?)を設定 iconPath = GetConfigParameter.GetConfigValue(FxLiteral.QUESTION_ICON_PATH); // エラー処理 if (iconPath == "") { throw new FrameworkException( FrameworkExceptionMessage.ERROR_IN_WRITING_OF_FX_PATH1[0], String.Format(FrameworkExceptionMessage.ERROR_IN_WRITING_OF_FX_PATH1[1], FxLiteral.QUESTION_ICON_PATH)); } this.imgIcon.ImageUrl = iconPath; // 表示の完了後、セッションを消去する。 Session.Remove(parentScreenGuid + FxHttpSessionIndex.MODAL_DIALOG_MESSAGE); Session.Remove(parentScreenGuid + FxHttpSessionIndex.MODAL_DIALOG_MESSAGEID); Session.Remove(parentScreenGuid + FxHttpSessionIndex.MODAL_DIALOG_NAME); // ACCESSログ出力 ---------------------------------------------- // ------------ // メッセージ部 // ------------ // ユーザ名, IPアドレス, // レイヤ, 画面名, コントロール名, 処理名 // 処理時間(実行時間), 処理時間(CPU時間) // エラーメッセージID, エラーメッセージ等 // ------------ string strLogMessage = "," + this.GetUserInfo().UserName + "," + Request.UserHostAddress + ",init" + ",YesNoMessageDialog" + ","; // Log4Netへログ出力 LogIF.InfoLog("ACCESS", strLogMessage); }
/// <summary> /// Pause this service with main thread and worker thread. /// </summary> protected override void OnPause() { if (!this._isServiceException) { // Stop the process of asynchronous service and Waits to complete all worker thread to complete. this.StopAsyncProcess(); } LogIF.InfoLog("ASYNC-SERVICE", GetMessage.GetMessageDescription("I0006")); }
public void InfoLog_Test(string loggerName, string message) { try { LogIF.InfoLog(loggerName, message); } catch (Exception ex) { // Print a stack trace when an exception occurs. Console.WriteLine(ex.StackTrace); throw; } }
/// <summary> /// アクション メソッドの呼び出し前に呼び出されます。 /// Controller.OnActionExecuting メソッド (System.Web.Mvc) /// http://msdn.microsoft.com/ja-jp/library/system.web.mvc.controller.onactionexecuting.aspx /// </summary> /// <param name="filterContext"> /// 型: System.Web.Mvc.ActionExecutingContext /// 現在の要求およびアクションに関する情報。 /// </param> protected override void OnActionExecuting(ActionExecutingContext filterContext) { this.GetRouteData(); // カスタム認証処理 -------------------------------------------- // ・・・ // ------------------------------------------------------------- // 認証ユーザ情報をメンバにロードする -------------------------- this.GetUserInfo(); // ------------------------------------------------------------- // 権限チェック ------------------------------------------------ // ・・・ // ------------------------------------------------------------- // 閉塞チェック ------------------------------------------------ // ・・・ // ------------------------------------------------------------- // キャッシュ制御処理 ------------------------------------------ this.CacheControlWithSwitch(); // ------------------------------------------------------------- // 性能測定開始 this.perfRec = new PerformanceRecorder(); this.perfRec.StartsPerformanceRecord(); // Calling base class method. base.OnActionExecuting(filterContext); // ------------ // メッセージ部 // ------------ // ユーザ名, IPアドレス, // レイヤ, 画面名, コントロール名, 処理名 // 処理時間(実行時間), 処理時間(CPU時間) // エラーメッセージID, エラーメッセージ等 // ------------ string strLogMessage = "," + this.UserInfo.UserName + "," + this.UserInfo.IPAddress + "," + "----->" + "," + this.ControllerName + "," + this.ActionName + "(OnActionExecuting)"; LogIF.InfoLog("ACCESS", strLogMessage); }
/// <summary> /// To handle pre-shutdown notification technique /// </summary> /// <param name="command">pre-shutdown command</param> protected override void OnCustomCommand(int command) { if (command == SERVICE_CONTROL_PRESHUTDOWN) { // To execute pre-shutdown notification technique LogIF.ErrorLog("ASYNC-SERVICE", GetMessage.GetMessageDescription("E0008")); this.StopAsyncProcess(); } else { // OS may shutdown with other than pre-shutdown command, Async Service may not terminated properly LogIF.ErrorLog("ASYNC-SERVICE", GetMessage.GetMessageDescription("E0010")); this.StopAsyncProcess(); base.OnCustomCommand(command); } LogIF.InfoLog("ASYNC-SERVICE", GetMessage.GetMessageDescription("I0009")); }
/// <summary>コンストラクタ</summary> public Splash() { InitializeComponent(); // プロパティの初期化 this.TopMost = true; this.ShowInTaskbar = false; this.FormBorderStyle = FormBorderStyle.None; this.StartPosition = FormStartPosition.CenterScreen; // イベントの設定 this.Click += new System.EventHandler(Splash.Splash_Click); this.label1.Click += new System.EventHandler(Splash.Splash_Click); // ログの初期化 LogIF.InfoLog("ACCESS", "Splash"); }
/// <summary>フォーム ロードのUOCメソッド(共通)</summary> /// <remarks> /// 実装必須 /// 画面コード親クラス1から利用される派生の末端 /// </remarks> protected override void UOC_CMNFormInit() { // フォーム ロード時に実行する処理を実装する // TODO: // イベント追加処理を呼び出す this.addControlEvent(); string eventName = FxLiteral.EVENT_FORM_LOAD; // フォーム初期化共通処理 // 権限チェック ------------------------------------------------ // ------------------------------------------------------------- // 閉塞チェック ------------------------------------------------ // ------------------------------------------------------------- // タイトル設定 ------------------------------------------------ // this.ContentPageFileNoExプロパティとタイトルを関係付けると良い this.Text = GetConfigParameter.GetConfigValue("Title") + "(" + this.Text + ")"; // ------------------------------------------------------------- // ACCESSログ出力 ---------------------------------------------- if (MyBaseControllerWin.CanOutPutLog) { // ------------ // メッセージ部 // ------------ // ユーザ名, レイヤ, 画面名, コントロール名 // ------------ string strLogMessage = "," + UserInfo.UserName + "," + "-" + "," + this.Name + "," + eventName; // Log4Netへログ出力 LogIF.InfoLog("ACCESS", strLogMessage); } // ------------------------------------------------------------- }
/// <summary> /// アクション メソッドの呼び出し前に発生します。 /// https://msdn.microsoft.com/ja-jp/library/dn573278.aspx /// </summary> /// <param name="actionContext">HttpActionContext</param> /// <param name="cancellationToken">CancellationToken</param> public override async Task OnActionExecutingAsync(HttpActionContext actionContext, CancellationToken cancellationToken) { // Controller・Action名を取得する。 this.GetControllerAndActionName(actionContext); // Claimを取得する。 string userName, roles, scopes, ipAddress; MyBaseAsyncApiController.GetClaims(out userName, out roles, out scopes, out ipAddress); // 権限チェック ------------------------------------------------ // ・・・ // ------------------------------------------------------------- // 閉塞チェック ------------------------------------------------ // ・・・ // ------------------------------------------------------------- // 性能測定開始 this.perfRec = new PerformanceRecorder(); this.perfRec.StartsPerformanceRecord(); // Calling base class method. await base.OnActionExecutingAsync(actionContext, cancellationToken); // ------------ // メッセージ部 // ------------ // ユーザ名, IPアドレス, // レイヤ, 画面名, コントロール名, 処理名 // 処理時間(実行時間), 処理時間(CPU時間) // エラーメッセージID, エラーメッセージ等 // ------------ string strLogMessage = "," + userName + //this.UserInfo.UserName + "," + ipAddress + //this.UserInfo.IPAddress + "," + "----->" + "," + this.ControllerName + "," + this.ActionName + "(OnActionExecuting)"; LogIF.InfoLog("ACCESS", strLogMessage); }
// 2009/09/01 & 2009/09/25-end #endregion #region P層フレームワークの共通処理 #region 開始 終了処理のUOCメソッド /// <summary>フレームワークの対象コントロールイベントの開始処理を実装</summary> /// <param name="fxEventArgs">イベントハンドラの共通引数</param> /// <remarks>画面コード親クラス1から利用される派生の末端</remarks> protected override void UOC_PreAction(FxEventArgs fxEventArgs) { // フレームワークの対象コントロールイベントの開始処理を実装する // TODO: // 認証ユーザ情報を取得する ------------------------------------ this.GetUserInfo(); // ------------------------------------------------------------- // 権限チェック ------------------------------------------------ // ------------------------------------------------------------- // 閉塞チェック ------------------------------------------------ // ------------------------------------------------------------- // ACCESSログ出力 ---------------------------------------------- // ------------ // メッセージ部 // ------------ // ユーザ名, IPアドレス, // レイヤ, 画面名, コントロール名, 処理名 // 処理時間(実行時間), 処理時間(CPU時間) // エラーメッセージID, エラーメッセージ等 // ------------ string strLogMessage = "," + UserInfo.UserName + "," + Request.UserHostAddress + "," + "----->" + "," + this.ContentPageFileNoEx + "," + fxEventArgs.ButtonID; // Log4Netへログ出力 LogIF.InfoLog("ACCESS", strLogMessage); // ------------------------------------------------------------- // 性能測定開始 this.perfRec = new PerformanceRecorder(); this.perfRec.StartsPerformanceRecord(); }
/// <summary>フレームワークの対象コントロールイベントの開始処理を実装</summary> /// <param name="rcFxEventArgs">イベントハンドラの共通引数</param> /// <remarks>画面コード親クラス1から利用される派生の末端</remarks> protected override void UOC_PreAction(RcFxEventArgs rcFxEventArgs) { // フレームワークの対象コントロールイベントの開始処理を実装する // TODO: // 権限チェック ------------------------------------------------ // ------------------------------------------------------------- // 閉塞チェック ------------------------------------------------ // ------------------------------------------------------------- // ACCESSログ出力 ---------------------------------------------- if (MyBaseControllerWin.CanOutPutLog) { // ------------ // メッセージ部 // ------------ // ユーザ名, レイヤ, 画面名, コントロール名, // 処理時間(実行時間), 処理時間(CPU時間) // エラーメッセージID, エラーメッセージ等 // ------------ string strLogMessage = "," + UserInfo.UserName + "," + "----->" + "," + this.Name + "," + rcFxEventArgs.ControlName; // Log4Netへログ出力 LogIF.InfoLog("ACCESS", strLogMessage); } // ------------------------------------------------------------- // 性能測定開始 this.perfRec = new PerformanceRecorder(); this.perfRec.StartsPerformanceRecord(); }
/// <summary>フレームワークの対象コントロールイベントの終了処理を実装</summary> /// <param name="fxEventArgs">イベントハンドラの共通引数</param> /// <remarks>画面コード親クラス1から利用される派生の末端</remarks> protected override void UOC_AfterAction(FxEventArgs fxEventArgs) { // フレームワークの対象コントロールイベントの終了処理を実装する // TODO: // 性能測定終了 this.perfRec.EndsPerformanceRecord(); // 認証ユーザ情報を取得する ------------------------------------ this.GetUserInfo(); // ACCESSログ出力 ---------------------------------------------- // ------------ // メッセージ部 // ------------ // ユーザ名, IPアドレス, // レイヤ, 画面名, コントロール名, 処理名 // 処理時間(実行時間), 処理時間(CPU時間) // エラーメッセージID, エラーメッセージ等 // ------------ string strLogMessage = "," + UserInfo.UserName + "," + Request.UserHostAddress + "," + "<-----" + "," + this.ContentPageFileNoEx + "," + fxEventArgs.ButtonID + "," + "" + "," + perfRec.ExecTime + "," + perfRec.CpuTime; // Log4Netへログ出力 LogIF.InfoLog("ACCESS", strLogMessage); // ------------------------------------------------------------- }
/// <summary> /// WCFの.NETオブジェクトのバイナリ転送用Soap Webメソッド /// </summary> /// <param name="serviceName">サービス名</param> /// <param name="contextObject">コンテキスト</param> /// <param name="parameterValueObject">引数</param> /// <param name="returnValueObject">戻り値</param> /// <returns>返すべきエラーの情報</returns> /// <remarks>値は全て.NETオブジェクトをバイナリシリアライズしたバイト配列データ</remarks> public byte[] DotNETOnlineWS( string serviceName, ref byte[] contextObject, byte[] parameterValueObject, out byte[] returnValueObject) { // ステータス string status = "-"; // 初期化のため returnValueObject = null; #region 呼出し制御関係の変数 // アセンブリ名 string assemblyName = ""; // クラス名 string className = ""; #endregion #region 引数・戻り値関係の変数 // コンテキスト情報 object context; // 2009/09/29-この行 // 引数・戻り値の.NETオブジェクト BaseParameterValue parameterValue = null; BaseReturnValue returnValue = null; // エラー情報(クライアント側で復元するため) WSErrorInfo wsErrorInfo = new WSErrorInfo(); // エラー情報(ログ出力用) string errorType = ""; // 2009/09/15-この行 string errorMessageID = ""; string errorMessage = ""; string errorToString = ""; #endregion try { // 開始ログの出力 LogIF.InfoLog("SERVICE-IF", FxLiteral.SIF_STATUS_START); #region 前解決 // ★ status = FxLiteral.SIF_STATUS_NAME_SERVICE; // 名前解決(インプロセス) WCFHTTPSvcForFx.IPR_NS.NameResolution(serviceName, out assemblyName, out className); #endregion #region 引数のデシリアライズ // ★ status = FxLiteral.SIF_STATUS_DESERIALIZE; // コンテキストクラスの.NETオブジェクト化 context = BinarySerialize.BytesToObject(contextObject); // 2009/09/29-この行 // ※ コンテキストの利用方法は任意だが、サービスインターフェイス上での利用に止める。 // 引数クラスの.NETオブジェクト化 parameterValue = (BaseParameterValue)BinarySerialize.BytesToObject(parameterValueObject); // 引数クラスをパラメタ セットに格納 object[] paramSet = new object[] { parameterValue, DbEnum.IsolationLevelEnum.User }; #endregion #region 認証処理のUOC // ★ status = FxLiteral.SIF_STATUS_AUTHENTICATION; string access_token = (string)context; if (!string.IsNullOrEmpty(access_token)) { string sub = ""; List <string> roles = null; List <string> scopes = null; JObject jobj = null; if (JwtToken.Verify(access_token, out sub, out roles, out scopes, out jobj)) { // 認証成功 Debug.WriteLine("認証成功"); } else { // 認証失敗(認証必須ならエラーにする。 } } else { // 認証失敗(認証必須ならエラーにする。 } //contextObject = BinarySerialize.ObjectToBytes(hogehoge); // 更新可能だが...。 #endregion #region B層・D層呼出し // ★ status = FxLiteral.SIF_STATUS_INVOKE; // #17-start try { // B層・D層呼出し //returnValue = (BaseReturnValue)Latebind.InvokeMethod( // AppDomain.CurrentDomain.BaseDirectory + "\\bin\\" + assemblyName + ".dll", // className, FxLiteral.TRANSMISSION_INPROCESS_METHOD_NAME, paramSet); returnValue = (BaseReturnValue)Latebind.InvokeMethod( assemblyName, className, FxLiteral.TRANSMISSION_INPROCESS_METHOD_NAME, paramSet); } catch (System.Reflection.TargetInvocationException rtEx) { //// InnerExceptionを投げなおす。 //throw rtEx.InnerException; // スタックトレースを保って InnerException を throw ExceptionDispatchInfo.Capture(rtEx.InnerException).Throw(); } // #17-end #endregion #region 戻り値のシリアライズ // ★ status = FxLiteral.SIF_STATUS_SERIALIZE; returnValueObject = BinarySerialize.ObjectToBytes(returnValue); #endregion // ★ status = ""; // 戻り値を返す。 return(null); } catch (BusinessSystemException bsEx) { // システム例外 // エラー情報を設定する。 wsErrorInfo.ErrorType = FxEnum.ErrorType.BusinessSystemException; wsErrorInfo.ErrorMessageID = bsEx.messageID; wsErrorInfo.ErrorMessage = bsEx.Message; // ログ出力用の情報を保存 errorType = FxEnum.ErrorType.BusinessSystemException.ToString(); // 2009/09/15-この行 errorMessageID = bsEx.messageID; errorMessage = bsEx.Message; errorToString = bsEx.ToString(); // エラー情報を戻す。 return(BinarySerialize.ObjectToBytes(wsErrorInfo)); } catch (FrameworkException fxEx) { // フレームワーク例外 // ★ インナーエクセプション情報は消失 // エラー情報を設定する。 wsErrorInfo.ErrorType = FxEnum.ErrorType.FrameworkException; wsErrorInfo.ErrorMessageID = fxEx.messageID; wsErrorInfo.ErrorMessage = fxEx.Message; // ログ出力用の情報を保存 errorType = FxEnum.ErrorType.FrameworkException.ToString(); // 2009/09/15-この行 errorMessageID = fxEx.messageID; errorMessage = fxEx.Message; errorToString = fxEx.ToString(); // エラー情報を戻す。 return(BinarySerialize.ObjectToBytes(wsErrorInfo)); } catch (Exception ex) { // ログ出力用の情報を保存 errorType = FxEnum.ErrorType.ElseException.ToString(); // 2009/09/15-この行 errorMessageID = "-"; errorMessage = ex.Message; errorToString = ex.ToString(); throw; // SoapExceptionになって伝播 } finally { // Sessionステートレス //HttpContext.Current.Session.Clear(); //HttpContext.Current.Session.Abandon(); // 終了ロクの出力 if (status == "") { // 終了ログ出力 LogIF.InfoLog("SERVICE-IF", "正常終了"); } else { // 終了ログ出力 LogIF.ErrorLog("SERVICE-IF", "異常終了" + ":" + status + "\r\n" + "エラー タイプ:" + errorType + "\r\n" // 2009/09/15-この行 + "エラー メッセージID:" + errorMessageID + "\r\n" + "エラー メッセージ:" + errorMessage + "\r\n" + errorToString); } } }
/// <summary>Soap & Bean の個別Webメソッドの共通部</summary> /// <param name="context">コンテキスト</param> /// <param name="methodName">メソッド名</param> /// <param name="parameterValue">引数Bean(個別・・・サブ)</param> /// <param name="returnValue">戻り値Bean(個別・・・サブ)</param> /// <returns>返すべきエラーの情報</returns> private string Call(ref string context, string serviceName, string methodName, string actionType, object parameterValue, out object returnValue) { // ステータス string status = "-"; // 初期化のため returnValue = ""; #region 呼出し制御関係の変数 // アセンブリ名 string assemblyName = ""; // クラス名 string className = ""; #endregion #region 引数・戻り値関係の変数 // 引数・戻り値の.NETオブジェクト MuParameterValue muParameterValue = null; MuReturnValue muReturnValue = null; // エラー情報(XMLフォーマット) XmlDocument wsErrorInfo = new XmlDocument(); XmlElement wsErrorRoot = null; XmlElement wsErrorItem = null; // エラー情報(ログ出力用) string errorType = ""; // 2009/09/15-この行 string errorMessageID = ""; string errorMessage = ""; string errorToString = ""; #endregion try { // 開始ログの出力 LogIF.InfoLog("SERVICE-IF", FxLiteral.SIF_STATUS_START); #region 前解決 // ★ status = FxLiteral.SIF_STATUS_NAME_SERVICE; // 名前解決(インプロセス) ServiceForSb.IPR_NS.NameResolution(serviceName, out assemblyName, out className); #endregion #region 引数の.NETオブジェクト化(UOC) // ★ status = FxLiteral.SIF_STATUS_DESERIALIZE; // ★★ 引数の.NETオブジェクト化をUOCする(必要に応じて)。 // 引数文字列の.NETオブジェクト化 // string[] cmnParameterValueを使用して初期化するなど muParameterValue = new MuParameterValue( "", //cmnParameterValue[0], // 画面名 "", //cmnParameterValue[1], // ボタン名 methodName, //cmnParameterValue[2], // メソッド名 actionType, //cmnParameterValue[3], // アクションタイプ new MyUserInfo(context, HttpContext.Current.Request.UserHostAddress)); // parameterValueを引数の文字列フィールドに設定 muParameterValue.Bean = parameterValue; // 引数クラスをパラメタ セットに格納 object[] paramSet = new object[] { muParameterValue, DbEnum.IsolationLevelEnum.User }; #endregion #region 認証処理(UOC) // ★ status = FxLiteral.SIF_STATUS_AUTHENTICATION; // ★★ 認証が通っているかどうか確認する。 if (!HttpContext.Current.Request.IsAuthenticated) { throw new BusinessSystemException("Authentication", "認証されていません。"); } // ★★ コンテキストの情報を使用するなどして // 認証処理をUOCする(必要に応じて)。 //// 認証チケットの復号化 //string[] authTicket = (string[])BinarySerialize.BytesToObject( // CustomEncode.FromBase64String( // SymmetricCryptography.DecryptString( // context, GetConfigParameter.GetConfigValue("private-key"), // EnumSymmetricAlgorithm.TripleDESCryptoServiceProvider))); //// ユーザIDの設定 //muParameterValue.User.UserName = authTicket[0]; // 認証チケットの整合性を確認 // Forms認証では、machinekeyを使用している。 // 必要に応じて認証サービス側も作り変える。 //// B層・D層呼出し //// タイムスタンプのチェックと、更新 //// スライディング・タイムアウトの実装、 //// 必要であればアカウントの検証も実施 //BaseReturnValue _returnValue = (BaseReturnValue)Latebind.InvokeMethod( // "xxxx", "yyyy", // FxLiteral.TRANSMISSION_INPROCESS_METHOD_NAME, // new object[] { new AuthParameterValue("-", "-", "zzzz", "", // muParameterValue.User, authTicket[1]), // DbEnum.IsolationLevelEnum.User }); //if (_returnValue.ErrorFlag) //{ // // 認証エラー // throw new BusinessSystemException("xxxx", "認証チケットが不正か、タイムアウトです。"); //} // 持ち回るならCookieにするか、 // contextをrefにするなどとする。 context = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fff"); // 更新されたかのテストコード #endregion #region B層・D層呼出し // ★ status = FxLiteral.SIF_STATUS_INVOKE; try { // B層・D層呼出し //// DLL名も指定するパターン(別DLLに含まれる) //muReturnValue = (MuReturnValue)Latebind.InvokeMethod( // assemblyName, className, FxLiteral.TRANSMISSION_INPROCESS_METHOD_NAME, paramSet); // DLL名は指定しないパターン(ExecutingAssemblyに含まれる) Assembly asm = Assembly.GetExecutingAssembly(); // DLL名は指定しないパターンでの例外処理 Type t = asm.GetType(className); if (t == null) { throw new BusinessSystemException("NoLBTypeInExecutingAssembly", string.Format("{0}クラスがExecutingAssemblyに存在しません。", className)); } object o = Activator.CreateInstance(t); muReturnValue = (MuReturnValue)Latebind.InvokeMethod(o, FxLiteral.TRANSMISSION_INPROCESS_METHOD_NAME, paramSet); } catch (System.Reflection.TargetInvocationException rtEx) { // InnerExceptionを投げなおす。 throw rtEx.InnerException; } #endregion #region 戻り値 // ★ status = FxLiteral.SIF_STATUS_SERIALIZE; returnValue = muReturnValue.Bean; if (muReturnValue.ErrorFlag) { // エラー情報を設定する。 wsErrorRoot = wsErrorInfo.CreateElement("ErrorInfo"); wsErrorInfo.AppendChild(wsErrorRoot); // 業務例外 wsErrorItem = wsErrorInfo.CreateElement("ErrorType"); wsErrorItem.InnerText = FxEnum.ErrorType.BusinessApplicationException.ToString(); wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("MessageID"); wsErrorItem.InnerText = muReturnValue.ErrorMessageID; wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("Message"); wsErrorItem.InnerText = muReturnValue.ErrorMessage; wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("Information"); wsErrorItem.InnerText = muReturnValue.ErrorInfo; wsErrorRoot.AppendChild(wsErrorItem); // ログ出力用の情報を保存 errorType = FxEnum.ErrorType.BusinessApplicationException.ToString(); // 2009/09/15-この行 errorMessageID = muReturnValue.ErrorMessageID; errorMessage = muReturnValue.ErrorMessage; errorToString = muReturnValue.ErrorInfo; // エラー情報を戻す。 return(wsErrorInfo.InnerXml); } #endregion // ★ status = ""; // 戻り値を返す。 return(""); } //catch (BusinessApplicationException baEx) //{ // ここには来ない↑ //} catch (BusinessSystemException bsEx) { // エラー情報を設定する。 wsErrorRoot = wsErrorInfo.CreateElement("ErrorInfo"); wsErrorInfo.AppendChild(wsErrorRoot); // システム例外 wsErrorItem = wsErrorInfo.CreateElement("ErrorType"); wsErrorItem.InnerText = FxEnum.ErrorType.BusinessSystemException.ToString(); wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("MessageID"); wsErrorItem.InnerText = bsEx.messageID; wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("Message"); wsErrorItem.InnerText = bsEx.Message; wsErrorRoot.AppendChild(wsErrorItem); // ログ出力用の情報を保存 errorType = FxEnum.ErrorType.BusinessSystemException.ToString(); // 2009/09/15-この行 errorMessageID = bsEx.messageID; errorMessage = bsEx.Message; errorToString = bsEx.ToString(); // エラー情報を戻す。 return(wsErrorInfo.InnerXml); } catch (FrameworkException fxEx) { // エラー情報を設定する。 wsErrorRoot = wsErrorInfo.CreateElement("ErrorInfo"); wsErrorInfo.AppendChild(wsErrorRoot); // フレームワーク例外 // ★ インナーエクセプション情報は消失 wsErrorItem = wsErrorInfo.CreateElement("ErrorType"); wsErrorItem.InnerText = FxEnum.ErrorType.FrameworkException.ToString(); wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("MessageID"); wsErrorItem.InnerText = fxEx.messageID; wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("Message"); wsErrorItem.InnerText = fxEx.Message; wsErrorRoot.AppendChild(wsErrorItem); // ログ出力用の情報を保存 errorType = FxEnum.ErrorType.FrameworkException.ToString(); // 2009/09/15-この行 errorMessageID = fxEx.messageID; errorMessage = fxEx.Message; errorToString = fxEx.ToString(); // エラー情報を戻す。 return(wsErrorInfo.InnerXml); } catch (Exception ex) { // エラー情報を設定する。 wsErrorRoot = wsErrorInfo.CreateElement("ErrorInfo"); wsErrorInfo.AppendChild(wsErrorRoot); // フレームワーク例外 // ★ インナーエクセプション情報は消失 wsErrorItem = wsErrorInfo.CreateElement("ErrorType"); wsErrorItem.InnerText = FxEnum.ErrorType.ElseException.ToString(); wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("MessageID"); wsErrorItem.InnerText = "-"; wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("Message"); wsErrorItem.InnerText = ex.ToString(); wsErrorRoot.AppendChild(wsErrorItem); // ログ出力用の情報を保存 errorType = FxEnum.ErrorType.ElseException.ToString(); // 2009/09/15-この行 errorMessageID = "-"; errorMessage = ex.Message; // どちらを戻すべきか? // Muの場合は、Messageがデフォ errorToString = ex.Message; //errorToString = ex.ToString(); // エラー情報を戻す。 return(wsErrorInfo.InnerXml); //throw; // コメントアウト } finally { // 用途によってSessionを解放するかどうかを検討。 //// Sessionステートレス //Session.Clear(); //Session.Abandon(); // 終了ログの出力 if (status == "") { // 終了ログ出力 LogIF.InfoLog("SERVICE-IF", "正常終了"); } else { // 終了ログ出力 LogIF.ErrorLog("SERVICE-IF", "異常終了" + ":" + status + "\r\n" + "エラー タイプ:" + errorType + "\r\n" // 2009/09/15-この行 + "エラー メッセージID:" + errorMessageID + "\r\n" + "エラー メッセージ:" + errorMessage + "\r\n" + errorToString + "\r\n"); } } }
/// <summary>初期化処理</summary> protected void Page_Load(object sender, EventArgs e) { // 親画面の画面GUIDを設定(QueryString)から取得 string parentScreenGuid = (string)Request.QueryString[FxHttpQueryStringIndex.PARENT_SCREEN_GUID]; // MessageIDとMessageをセッションより取得し、設定 this.lblmessage.Text = (string)Session[parentScreenGuid + FxHttpSessionIndex.MODAL_DIALOG_MESSAGE]; this.lblmessageID.Text = (string)Session[parentScreenGuid + FxHttpSessionIndex.MODAL_DIALOG_MESSAGEID]; // タイトル設定 this.Title = (string)Session[parentScreenGuid + FxHttpSessionIndex.MODAL_DIALOG_NAME]; // アイコンを設定 int icon = (int)Session[parentScreenGuid + FxHttpSessionIndex.MODAL_DIALOG_ICONTYPE]; // アイコンへのパスを取得 string iconPath; if (icon == (int)FxEnum.IconType.Information) { //情報を表すアイコン(i)を設定 iconPath = GetConfigParameter.GetConfigValue(FxLiteral.INFORMATION_ICON_PATH); // エラー処理 if (iconPath == "") { throw new FrameworkException( FrameworkExceptionMessage.ERROR_IN_WRITING_OF_FX_PATH1[0], String.Format(FrameworkExceptionMessage.ERROR_IN_WRITING_OF_FX_PATH1[1], FxLiteral.INFORMATION_ICON_PATH)); } this.imgIcon.ImageUrl = iconPath; } else if (icon == (int)FxEnum.IconType.Exclamation) { //警告時のアイコン(!)を設定 iconPath = GetConfigParameter.GetConfigValue(FxLiteral.WARNING_ICON_PATH); // エラー処理 if (iconPath == "") { throw new FrameworkException( FrameworkExceptionMessage.ERROR_IN_WRITING_OF_FX_PATH1[0], String.Format(FrameworkExceptionMessage.ERROR_IN_WRITING_OF_FX_PATH1[1], FxLiteral.WARNING_ICON_PATH)); } this.imgIcon.ImageUrl = iconPath; } else if (icon == (int)FxEnum.IconType.StopMark) { //エラー時のアイコン(×)を設定 iconPath = GetConfigParameter.GetConfigValue(FxLiteral.ERROR_ICON_PATH); // エラー処理 if (iconPath == "") { throw new FrameworkException( FrameworkExceptionMessage.ERROR_IN_WRITING_OF_FX_PATH1[0], String.Format(FrameworkExceptionMessage.ERROR_IN_WRITING_OF_FX_PATH1[1], FxLiteral.ERROR_ICON_PATH)); } this.imgIcon.ImageUrl = iconPath; } else { } // 表示の完了後、セッションを消去する。 Session.Remove(parentScreenGuid + FxHttpSessionIndex.MODAL_DIALOG_MESSAGE); Session.Remove(parentScreenGuid + FxHttpSessionIndex.MODAL_DIALOG_MESSAGEID); Session.Remove(parentScreenGuid + FxHttpSessionIndex.MODAL_DIALOG_NAME); Session.Remove(parentScreenGuid + FxHttpSessionIndex.MODAL_DIALOG_ICONTYPE); // 認証ユーザ情報を取得する ------------------------------------ this.GetUserInfo(); // ------------------------------------------------------------- // ACCESSログ出力 ---------------------------------------------- // ------------ // Message部 // ------------ // ユーザ名, IPアドレス, // レイヤ, 画面名, Control名, 処理名 // 処理時間(実行時間), 処理時間(CPU時間) // Error MessageID, Error Message等 // ------------ string strLogMessage = "," + this.GetUserInfo().UserName + "," + Request.UserHostAddress + ",init" + ",OKMessageDialog" + ","; // Log4Netへログ出力 LogIF.InfoLog("ACCESS", strLogMessage); }
/// <summary>フォーム初期化共通処理</summary> /// <param name="eventName">イベント名(init or postback)</param> private void CMN_FormInit(string eventName) { // イベント追加処理を呼び出す this.addControlEvent(); // カスタム認証処理 -------------------------------------------- // ------------------------------------------------------------- // 2009/09/01-start // 認証ユーザ情報をメンバにロードする -------------------------- this.GetUserInfo(); // ------------------------------------------------------------- // サブシステム情報をメンバにロードする ------------------------ this.GetSubsysInfo(); // ------------------------------------------------------------- // 2009/09/01-end // 権限チェック ------------------------------------------------ // ------------------------------------------------------------- // 閉塞チェック ------------------------------------------------ // ------------------------------------------------------------- // キャッシュ無効化処理 ---------------------------------------- // システムで固定に出来る場合は、ここでキャッシュ無効化する。 // Fxテスト段階では、IISの設定により制御したほうが楽。 // また、ファイルダウンロード処理などで // UPでFxの設定したキャッシュ制御を // 変更したい場合は、Response.Clearを実行する。 Response.AddHeader("Cache-Control", "no-cache"); Response.CacheControl = "no-cache"; //Response.AddHeader("Cache-Control", "private"); //Response.CacheControl = "private"; // ------------------------------------------------------------- // ポストバック後の位置復元 ------------------------------------ Page.MaintainScrollPositionOnPostBack = true; // ------------------------------------------------------------- // タイトル設定 ------------------------------------------------ // this.ContentPageFileNoExプロパティとタイトルを関係付けると良い this.Page.Title = GetConfigParameter.GetConfigValue("BrowserTitle") + "(" + this.ContentPageFileNoEx + ")"; // ------------------------------------------------------------- // ACCESSログ出力 ---------------------------------------------- // ------------ // メッセージ部 // ------------ // ユーザ名, IPアドレス, // レイヤ, 画面名, コントロール名, 処理名 // 処理時間(実行時間), 処理時間(CPU時間) // エラーメッセージID, エラーメッセージ等 // ------------ string strLogMessage = "," + UserInfo.UserName + "," + Request.UserHostAddress + "," + eventName + "," + this.ContentPageFileNoEx; // Log4Netへログ出力 LogIF.InfoLog("ACCESS", strLogMessage); // ------------------------------------------------------------- }
/// <summary>フォーム初期化共通処理</summary> /// <param name="eventName">イベント名(init or postback)</param> private void CMN_FormInit(string eventName) { // イベント追加処理を呼び出す this.addControlEvent(); // カスタム認証処理 -------------------------------------------- // ・・・ // ------------------------------------------------------------- // 2009/09/01-start // 認証ユーザ情報をメンバにロードする -------------------------- this.GetUserInfo(); // ------------------------------------------------------------- // サブシステム情報をメンバにロードする ------------------------ this.GetSubsysInfo(); // ------------------------------------------------------------- // 2009/09/01-end // 権限チェック ------------------------------------------------ // ・・・ // ------------------------------------------------------------- // 閉塞チェック ------------------------------------------------ // ・・・ // ------------------------------------------------------------- // キャッシュ制御処理 ------------------------------------------ this.CacheControlWithSwitch(); // ------------------------------------------------------------- // ポストバック後の位置復元 ------------------------------------ Page.MaintainScrollPositionOnPostBack = true; // ------------------------------------------------------------- // タイトル設定 ------------------------------------------------ // this.ContentPageFileNoExプロパティとタイトルを関係付けると良い this.Page.Title = GetConfigParameter.GetConfigValue("BrowserTitle") + "(" + this.ContentPageFileNoEx + ")"; // ------------------------------------------------------------- // ACCESSログ出力 ---------------------------------------------- // ------------ // メッセージ部 // ------------ // ユーザ名, IPアドレス, // レイヤ, 画面名, コントロール名, 処理名 // 処理時間(実行時間), 処理時間(CPU時間) // エラーメッセージID, エラーメッセージ等 // ------------ string strLogMessage = "," + UserInfo.UserName + "," + Request.UserHostAddress + "," + eventName + "," + this.ContentPageFileNoEx; // Log4Netへログ出力 LogIF.InfoLog("ACCESS", strLogMessage); // ------------------------------------------------------------- }
/// <summary> /// Maintains the Main thread of the Asynchronous Service /// </summary> public void MainThreadInvoke() { // Asynchronous service is started LogIF.InfoLog("ASYNC-SERVICE", GetMessage.GetMessageDescription("I0001")); // Infinte loop processing for selecting register task. while (this._infiniteLoop) { try { // Get asynchronous task from the database. AsyncProcessingServiceParameterValue asyncParameterValue = new AsyncProcessingServiceParameterValue("AsyncProcessingService", "SelectTask", "SelectTask", "SQL", new MyUserInfo("AsyncProcessingService", "AsyncProcessingService")); asyncParameterValue.RegistrationDateTime = DateTime.Now - new TimeSpan(_maxNumberOfHours, 0, 0); asyncParameterValue.NumberOfRetries = this._maxNumberOfRetries; asyncParameterValue.CompletionDateTime = DateTime.Now - new TimeSpan(_maxNumberOfHours, 0, 0); LayerB layerB = new LayerB(); AsyncProcessingServiceReturnValue selectedAsyncTask = (AsyncProcessingServiceReturnValue)layerB.DoBusinessLogic( (BaseParameterValue)asyncParameterValue, DbEnum.IsolationLevelEnum.ReadCommitted); // Existence check of asynchronous task if (string.IsNullOrEmpty(selectedAsyncTask.UserId)) { // Asynchronous task does not exist. // Wait for the asynchronous task to be registered in the database. Thread.Sleep(this._numberOfSeconds * 1000); // Continue to this infinite loop. continue; } // Asynchronous task exists. // Check the number of free worker threads. int freeWorkerThreads = 0; int completionPortThreads = 0; // Gets the available threads. ThreadPool.GetAvailableThreads(out freeWorkerThreads, out completionPortThreads); while (freeWorkerThreads == 0) { // Wait for the completion of the worker thread. Thread.Sleep(this._numberOfSeconds * 1000); // Get available threads. ThreadPool.GetAvailableThreads(out freeWorkerThreads, out completionPortThreads); } // Selected asynchronous task is assigned to a worker thread this.UpdateAsyncTask(selectedAsyncTask, AsyncTaskUpdate.START); LogIF.InfoLog("ASYNC-SERVICE", string.Format(GetMessage.GetMessageDescription("I0002"), selectedAsyncTask.TaskId)); // Assign the task to the worker thread ThreadPool.QueueUserWorkItem(new WaitCallback(this.WorkerThreadCallBack), (object)selectedAsyncTask); } catch (Exception ex) { // Service Failed due to unexpected exception. this._infiniteLoop = false; LogIF.ErrorLog("ASYNC-SERVICE", string.Format(GetMessage.GetMessageDescription("E0000"), ex.Message.ToString())); } } }
/// <summary>ASP.NET WebAPI JSON-RPCの個別Webメソッドの共通部</summary> /// <param name="serviceName">サービス名</param> /// <param name="parameterValue">引数</param> /// <returns> /// AsyncRetVal(非同期化のため) /// ・WsErrorInfo:返すべきエラーの情報 /// ・ReturnValue:戻り値 /// </returns> private async Task <AsyncRetVal> Call( string serviceName, BaseParameterValue parameterValue) { // ステータス string status = "-"; #region 呼出し制御関係の変数 // アセンブリ名 string assemblyName = ""; // クラス名 string className = ""; #endregion #region 引数・戻り値関係の変数 BaseReturnValue returnValue = null; // エラー情報(XMLフォーマット) Dictionary <string, string> wsErrorInfo = new Dictionary <string, string>(); // エラー情報(ログ出力用) string errorType = ""; // 2009/09/15-この行 string errorMessageID = ""; string errorMessage = ""; string errorToString = ""; #endregion try { // 開始ログの出力 LogIF.InfoLog("SERVICE-IF", FxLiteral.SIF_STATUS_START); #region 前解決 // ★ status = FxLiteral.SIF_STATUS_NAME_SERVICE; // 名前解決(インプロセス) JsonController.IPR_NS.NameResolution(serviceName, out assemblyName, out className); #endregion #region 引数の.NETオブジェクト化(UOC) // ★ status = FxLiteral.SIF_STATUS_DESERIALIZE; // 引数クラスをパラメタ セットに格納 object[] paramSet = new object[] { parameterValue, DbEnum.IsolationLevelEnum.User }; #endregion #region 認証処理(UOC) // MyBaseApiControllerに実装する。 #endregion #region B層・D層呼出し // ★ status = FxLiteral.SIF_STATUS_INVOKE; try { // B層・D層呼出し try { // B層・D層呼出し Task <BaseReturnValue> result = (Task <BaseReturnValue>)Latebind.InvokeMethod( assemblyName, className, FxLiteral.TRANSMISSION_INPROCESS_ASYNC_METHOD_NAME, paramSet); returnValue = await result; } catch (System.Reflection.TargetInvocationException rtEx) { //// InnerExceptionを投げなおす。 //throw rtEx.InnerException; // スタックトレースを保って InnerException を throw ExceptionDispatchInfo.Capture(rtEx.InnerException).Throw(); } } catch (System.Reflection.TargetInvocationException rtEx) { // InnerExceptionを投げなおす。 throw rtEx.InnerException; } #endregion // ★ status = ""; // 戻り値を返す。 return(new AsyncRetVal { WsErrorInfo = null, ReturnValue = returnValue }); } //catch (BusinessApplicationException baEx) //{ // ここには来ない↑ //} catch (BusinessSystemException bsEx) { // エラー情報を設定する。 // システム例外 wsErrorInfo["ErrorType"] = FxEnum.ErrorType.BusinessSystemException.ToString(); wsErrorInfo["MessageID"] = bsEx.messageID; wsErrorInfo["Message"] = bsEx.Message; // ログ出力用の情報を保存 errorType = FxEnum.ErrorType.BusinessSystemException.ToString(); // 2009/09/15-この行 errorMessageID = bsEx.messageID; errorMessage = bsEx.Message; errorToString = bsEx.ToString(); // エラー情報を戻す。 return(new AsyncRetVal { WsErrorInfo = wsErrorInfo, ReturnValue = returnValue }); } catch (FrameworkException fxEx) { // エラー情報を設定する。 // フレームワーク例外 // ★ インナーエクセプション情報は消失 wsErrorInfo["ErrorType"] = FxEnum.ErrorType.FrameworkException.ToString(); wsErrorInfo["MessageID"] = fxEx.messageID; wsErrorInfo["Message"] = fxEx.Message; // ログ出力用の情報を保存 errorType = FxEnum.ErrorType.FrameworkException.ToString(); // 2009/09/15-この行 errorMessageID = fxEx.messageID; errorMessage = fxEx.Message; errorToString = fxEx.ToString(); // エラー情報を戻す。 return(new AsyncRetVal { WsErrorInfo = wsErrorInfo, ReturnValue = returnValue }); } catch (Exception ex) { // エラー情報を設定する。 // フレームワーク例外 // ★ インナーエクセプション情報は消失 wsErrorInfo["ErrorType"] = FxEnum.ErrorType.ElseException.ToString(); wsErrorInfo["MessageID"] = "-"; wsErrorInfo["Message"] = ex.ToString(); // ログ出力用の情報を保存 errorType = FxEnum.ErrorType.ElseException.ToString(); // 2009/09/15-この行 errorMessageID = "-"; errorMessage = ex.Message; // どちらを戻すべきか? // Muの場合は、Messageがデフォ errorToString = ex.Message; //errorToString = ex.ToString(); // エラー情報を戻す。 return(new AsyncRetVal { WsErrorInfo = wsErrorInfo, ReturnValue = returnValue }); } finally { // 用途によってSessionを解放するかどうかを検討。 //// Sessionステートレス //Session.Clear(); //Session.Abandon(); // 終了ログの出力 if (status == "") { // 終了ログ出力 LogIF.InfoLog("SERVICE-IF", "正常終了"); } else { // 終了ログ出力 LogIF.ErrorLog("SERVICE-IF", "異常終了" + ":" + status + "\r\n" + "エラー タイプ:" + errorType + "\r\n" // 2009/09/15-この行 + "エラー メッセージID:" + errorMessageID + "\r\n" + "エラー メッセージ:" + errorMessage + "\r\n" + errorToString + "\r\n"); } } }
/// <summary> /// Maintains the single worker thread functionalities. /// </summary> /// <param name="asyncTask">Selected Asynchronous Task</param> private void WorkerThreadCallBack(object asyncTask) { AsyncProcessingServiceReturnValue selectedAsyncTask = (AsyncProcessingServiceReturnValue)asyncTask; // A new worker thread started an Async task this._workerThreadCount++; try { // To handle unstable "Register" state, when you invoke [Abort] at this state if (selectedAsyncTask.CommandId == (int)AsyncProcessingServiceParameterValue.AsyncCommand.Abort) { throw new BusinessSystemException("APSAbortCommand", GetMessage.GetMessageDescription("CTE0004")); } // Call User Program to execute by using communication control function AsyncProcessingServiceParameterValue asyncParameterValue = new AsyncProcessingServiceParameterValue("AsyncProcessingService", "Start", "Start", "SQL", new MyUserInfo(selectedAsyncTask.UserId, selectedAsyncTask.TaskId.ToString())); asyncParameterValue.TaskId = selectedAsyncTask.TaskId; asyncParameterValue.Data = selectedAsyncTask.Data; CallController callController = new CallController(asyncParameterValue.User); AsyncProcessingServiceReturnValue asyncReturnValue = (AsyncProcessingServiceReturnValue)callController.Invoke(selectedAsyncTask.ProcessName, asyncParameterValue); if (asyncReturnValue.ErrorFlag == true) { if (asyncReturnValue.ErrorMessageID == "APSStopCommand") { string exceptionInfo = "ErrorMessageID: " + asyncReturnValue.ErrorMessageID + Environment.NewLine + "ErrorMessage: " + asyncReturnValue.ErrorMessage; // Asynchronous task is stopped due to user 'stop' command. this.UpdateAsyncTask(selectedAsyncTask, AsyncTaskUpdate.RETRY, exceptionInfo); LogIF.ErrorLog("ASYNC-SERVICE", string.Format(GetMessage.GetMessageDescription("E0001") + asyncReturnValue.ErrorMessage, selectedAsyncTask.TaskId)); } else { // Exception occurred by other than BusinessApplicationException if (selectedAsyncTask.NumberOfRetries < this._maxNumberOfRetries) { // Asynchronous task does not exceeds the maximum number of retries // Updated as retry later string exceptionInfo = "ErrorMessageID: " + asyncReturnValue.ErrorMessageID + Environment.NewLine + "ErrorMessage: " + asyncReturnValue.ErrorMessage; selectedAsyncTask.NumberOfRetries += 1; this.UpdateAsyncTask(selectedAsyncTask, AsyncTaskUpdate.RETRY, exceptionInfo); LogIF.ErrorLog("ASYNC-SERVICE", string.Format(GetMessage.GetMessageDescription("E0004"), selectedAsyncTask.TaskId)); } else { // Asynchronous task exceeds maximum number of retries // Update task as abort string exceptionInfo = "ErrorMessageID: " + asyncReturnValue.ErrorMessageID + Environment.NewLine + "ErrorMessage: " + asyncReturnValue.ErrorMessage; this.UpdateAsyncTask(selectedAsyncTask, AsyncTaskUpdate.FAIL, exceptionInfo); LogIF.ErrorLog("ASYNC-SERVICE", string.Format(GetMessage.GetMessageDescription("E0005"), selectedAsyncTask.TaskId)); } } } else { // Selected Asynchronous task is completed successfully. this.UpdateAsyncTask(selectedAsyncTask, AsyncTaskUpdate.SUCCESS); LogIF.InfoLog("ASYNC-SERVICE", string.Format(GetMessage.GetMessageDescription("I0003"), selectedAsyncTask.TaskId)); } } catch (BusinessSystemException ex) { // Asynchronous task is aborted due to BusinessSystemException sent by user program. string exceptionInfo = "ErrorMessageID: " + ex.messageID + Environment.NewLine + "ErrorMessage: " + ex.Message; this.UpdateAsyncTask(selectedAsyncTask, AsyncTaskUpdate.FAIL, exceptionInfo); LogIF.ErrorLog("ASYNC-SERVICE", string.Format(GetMessage.GetMessageDescription("E0006"), selectedAsyncTask.TaskId, ex.Message)); } catch (Exception ex) { // Asynchronous task is aborted due to unexpected exception. string exceptionInfo = "ErrorMessageID: " + ex.GetType().Name + Environment.NewLine + "ErrorMessage: " + ex.Message; this.UpdateAsyncTask(selectedAsyncTask, AsyncTaskUpdate.FAIL, exceptionInfo); LogIF.ErrorLog("ASYNC-SERVICE", string.Format(GetMessage.GetMessageDescription("E0006"), selectedAsyncTask.TaskId, ex.Message)); } finally { // Async task is over this._workerThreadCount--; } }
/// <summary>Soap & Bean 個別Soap Webメソッドの共通部</summary> /// <param name="context">コンテキスト</param> /// <param name="methodName">メソッド名</param> /// <param name="parameterValue">引数Bean(個別・・・サブ)</param> /// <param name="returnValue">戻り値Bean(個別・・・サブ)</param> /// <returns>返すべきエラーの情報</returns> private string Call(ref string context, string serviceName, string methodName, string actionType, object parameterValue, out object returnValue) { // ステータス string status = "-"; // 初期化のため returnValue = ""; #region 呼出し制御関係の変数 // アセンブリ名 string assemblyName = ""; // クラス名 string className = ""; #endregion #region 引数・戻り値関係の変数 // 引数・戻り値の.NETオブジェクト MuParameterValue muParameterValue = null; MuReturnValue muReturnValue = null; // エラー情報(XMLフォーマット) XmlDocument wsErrorInfo = new XmlDocument(); XmlElement wsErrorRoot = null; XmlElement wsErrorItem = null; // エラー情報(ログ出力用) string errorType = ""; // 2009/09/15-この行 string errorMessageID = ""; string errorMessage = ""; string errorToString = ""; #endregion try { // 開始ログの出力 LogIF.InfoLog("SERVICE-IF", FxLiteral.SIF_STATUS_START); #region 前解決 // ★ status = FxLiteral.SIF_STATUS_NAME_SERVICE; // 名前解決(インプロセス) ServiceForSb.IPR_NS.NameResolution(serviceName, out assemblyName, out className); #endregion #region 引数の.NETオブジェクト化(UOC) // ★ status = FxLiteral.SIF_STATUS_DESERIALIZE; // ★★ 引数の.NETオブジェクト化をUOCする(必要に応じて)。 // 引数文字列の.NETオブジェクト化 // string[] cmnParameterValueを使用して初期化するなど muParameterValue = new MuParameterValue( "", //cmnParameterValue[0], // 画面名 "", //cmnParameterValue[1], // ボタン名 methodName, //cmnParameterValue[2], // メソッド名 actionType, //cmnParameterValue[3], // アクションタイプ new MyUserInfo(context, HttpContext.Current.Request.UserHostAddress)); // parameterValueを引数の文字列フィールドに設定 muParameterValue.Bean = parameterValue; // 引数クラスをパラメタ セットに格納 object[] paramSet = new object[] { muParameterValue, DbEnum.IsolationLevelEnum.User }; #endregion #region 認証処理(UOC) // ★ status = FxLiteral.SIF_STATUS_AUTHENTICATION; string access_token = (string)context; if (!string.IsNullOrEmpty(access_token)) { string sub = ""; List <string> roles = null; List <string> scopes = null; JObject jobj = null; if (JwtToken.Verify(access_token, out sub, out roles, out scopes, out jobj)) { // 認証成功 Debug.WriteLine("認証成功"); } else { // 認証失敗(認証必須ならエラーにする。 } } else { // 認証失敗(認証必須ならエラーにする。 } #endregion #region B層・D層呼出し // ★ status = FxLiteral.SIF_STATUS_INVOKE; try { // B層・D層呼出し //// DLL名も指定するパターン(別DLLに含まれる) //muReturnValue = (MuReturnValue)Latebind.InvokeMethod( // assemblyName, className, FxLiteral.TRANSMISSION_INPROCESS_METHOD_NAME, paramSet); // DLL名は指定しないパターン(ExecutingAssemblyに含まれる) Assembly asm = Assembly.GetExecutingAssembly(); // DLL名は指定しないパターンでの例外処理 Type t = asm.GetType(className); if (t == null) { throw new BusinessSystemException("NoLBTypeInExecutingAssembly", string.Format("{0}クラスがExecutingAssemblyに存在しません。", className)); } object o = Activator.CreateInstance(t); muReturnValue = (MuReturnValue)Latebind.InvokeMethod(o, FxLiteral.TRANSMISSION_INPROCESS_METHOD_NAME, paramSet); } catch (System.Reflection.TargetInvocationException rtEx) { // InnerExceptionを投げなおす。 throw rtEx.InnerException; } #endregion #region 戻り値 // ★ status = FxLiteral.SIF_STATUS_SERIALIZE; returnValue = muReturnValue.Bean; if (muReturnValue.ErrorFlag) { // エラー情報を設定する。 wsErrorRoot = wsErrorInfo.CreateElement("ErrorInfo"); wsErrorInfo.AppendChild(wsErrorRoot); // 業務例外 wsErrorItem = wsErrorInfo.CreateElement("ErrorType"); wsErrorItem.InnerText = FxEnum.ErrorType.BusinessApplicationException.ToString(); wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("MessageID"); wsErrorItem.InnerText = muReturnValue.ErrorMessageID; wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("Message"); wsErrorItem.InnerText = muReturnValue.ErrorMessage; wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("Information"); wsErrorItem.InnerText = muReturnValue.ErrorInfo; wsErrorRoot.AppendChild(wsErrorItem); // ログ出力用の情報を保存 errorType = FxEnum.ErrorType.BusinessApplicationException.ToString(); // 2009/09/15-この行 errorMessageID = muReturnValue.ErrorMessageID; errorMessage = muReturnValue.ErrorMessage; errorToString = muReturnValue.ErrorInfo; // エラー情報を戻す。 return(wsErrorInfo.InnerXml); } #endregion // ★ status = ""; // 戻り値を返す。 return(""); } //catch (BusinessApplicationException baEx) //{ // ここには来ない↑ //} catch (BusinessSystemException bsEx) { // エラー情報を設定する。 wsErrorRoot = wsErrorInfo.CreateElement("ErrorInfo"); wsErrorInfo.AppendChild(wsErrorRoot); // システム例外 wsErrorItem = wsErrorInfo.CreateElement("ErrorType"); wsErrorItem.InnerText = FxEnum.ErrorType.BusinessSystemException.ToString(); wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("MessageID"); wsErrorItem.InnerText = bsEx.messageID; wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("Message"); wsErrorItem.InnerText = bsEx.Message; wsErrorRoot.AppendChild(wsErrorItem); // ログ出力用の情報を保存 errorType = FxEnum.ErrorType.BusinessSystemException.ToString(); // 2009/09/15-この行 errorMessageID = bsEx.messageID; errorMessage = bsEx.Message; errorToString = bsEx.ToString(); // エラー情報を戻す。 return(wsErrorInfo.InnerXml); } catch (FrameworkException fxEx) { // エラー情報を設定する。 wsErrorRoot = wsErrorInfo.CreateElement("ErrorInfo"); wsErrorInfo.AppendChild(wsErrorRoot); // フレームワーク例外 // ★ インナーエクセプション情報は消失 wsErrorItem = wsErrorInfo.CreateElement("ErrorType"); wsErrorItem.InnerText = FxEnum.ErrorType.FrameworkException.ToString(); wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("MessageID"); wsErrorItem.InnerText = fxEx.messageID; wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("Message"); wsErrorItem.InnerText = fxEx.Message; wsErrorRoot.AppendChild(wsErrorItem); // ログ出力用の情報を保存 errorType = FxEnum.ErrorType.FrameworkException.ToString(); // 2009/09/15-この行 errorMessageID = fxEx.messageID; errorMessage = fxEx.Message; errorToString = fxEx.ToString(); // エラー情報を戻す。 return(wsErrorInfo.InnerXml); } catch (Exception ex) { // エラー情報を設定する。 wsErrorRoot = wsErrorInfo.CreateElement("ErrorInfo"); wsErrorInfo.AppendChild(wsErrorRoot); // フレームワーク例外 // ★ インナーエクセプション情報は消失 wsErrorItem = wsErrorInfo.CreateElement("ErrorType"); wsErrorItem.InnerText = FxEnum.ErrorType.ElseException.ToString(); wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("MessageID"); wsErrorItem.InnerText = "-"; wsErrorRoot.AppendChild(wsErrorItem); wsErrorItem = wsErrorInfo.CreateElement("Message"); wsErrorItem.InnerText = ex.ToString(); wsErrorRoot.AppendChild(wsErrorItem); // ログ出力用の情報を保存 errorType = FxEnum.ErrorType.ElseException.ToString(); // 2009/09/15-この行 errorMessageID = "-"; errorMessage = ex.Message; // どちらを戻すべきか? // Muの場合は、Messageがデフォ errorToString = ex.Message; //errorToString = ex.ToString(); // エラー情報を戻す。 return(wsErrorInfo.InnerXml); //throw; // コメントアウト } finally { // 用途によってSessionを解放するかどうかを検討。 //// Sessionステートレス //Session.Clear(); //Session.Abandon(); // 終了ログの出力 if (status == "") { // 終了ログ出力 LogIF.InfoLog("SERVICE-IF", "正常終了"); } else { // 終了ログ出力 LogIF.ErrorLog("SERVICE-IF", "異常終了" + ":" + status + "\r\n" + "エラー タイプ:" + errorType + "\r\n" // 2009/09/15-この行 + "エラー メッセージID:" + errorMessageID + "\r\n" + "エラー メッセージ:" + errorMessage + "\r\n" + errorToString + "\r\n"); } } }