public override IMessage Invoke(IMessage msg) { IMethodCallMessage call = msg as IMethodCallMessage; IConstructionCallMessage ctor = msg as IConstructionCallMessage; IMethodReturnMessage result = null; if (ctor != null) // 呼び出し関数がコンストラクタの場合 { _behavior.PreInitializer(ctor); RealProxy rp = RemotingServices.GetRealProxy(_target); rp.InitializeServerObject(ctor); MarshalByRefObject tp = this.GetTransparentProxy() as MarshalByRefObject; result = EnterpriseServicesHelper.CreateConstructionReturnMessage(ctor, tp); _behavior.PostInitializer(ctor); } else if (call != null) // 通常関数の場合 { _behavior.PreCallMethod(call); result = RemotingServices.ExecuteMessage(this._target, call); _behavior.PostCallMethod(call); } else { Console.WriteLine($"メソッドの実行に失敗しました:{msg}"); //throw new Exception($"メソッドの実行に失敗しました:{msg}"); } return(result); }
/// <summary> /// 処理を実行します。 /// </summary> /// <param name="msg">呼び出し元を表すメッセージです。</param> /// <returns>戻り値を表すメッセージです。</returns> public override IMessage Invoke(IMessage msg) { IMessage result = null; if (msg is IConstructionCallMessage ctor) // コンストラクタの場合 // 特殊な処理 { _behavior.PreInitializer(_serverType, ctor); // コンストラクタ呼び出し var rp = RemotingServices.GetRealProxy(_target); rp.InitializeServerObject(ctor); var tp = this.GetTransparentProxy() as MarshalByRefObject; result = EnterpriseServicesHelper.CreateConstructionReturnMessage(ctor, tp); // 特殊な処理 _behavior.PostInitializer(_serverType, ctor); } else if (msg is IMethodCallMessage func) // 通常関数の場合 // 特殊な処理 { _behavior.PreCallMethod(_serverType, func); // 通常関数呼び出し result = RemotingServices.ExecuteMessage(_target, func); // 特殊な処理 _behavior.PostCallMethod(_serverType, func); } else { // 呼び出しが不正 result = _behavior.HandleInvalidCall(_serverType, msg); } return(result); }