AOPProxy
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Proxies;
using System.Runtime.Remoting.Messaging;
using System.Runtime.Remoting.Activation;
using System.Runtime.Remoting.Services;
namespace SharpRush.AOP.Support
{
/// <summary>
/// AOPProxy 的摘要说明。
/// </summary>
public class AOPProxy:RealProxy
{
MarshalByRefObject refObj;
AOPAttribute _attribute;
/// <summary>
///
/// </summary>
public AOPProxy()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
///
/// </summary>
/// <param name="attribute"></param>
/// <param name="type"></param>
/// <param name="obj"></param>
public AOPProxy(AOPAttribute attribute,Type type,MarshalByRefObject obj) : base(type)
{
refObj=obj;
_attribute=attribute;
}
/// <summary>
///
/// </summary>
/// <param name="msg"></param>
/// <returns></returns>
public override IMessage Invoke(IMessage msg)
{
PreProcess(msg);
IMessage returnMsg=InvokeMessage(msg);
PostProcess(returnMsg);
return returnMsg;
}
/// <summary>
///
/// </summary>
/// <param name="msg"></param>
private void PreProcess(IMessage msg)
{
_attribute.PreProcess(msg);
}
/// <summary>
///
/// </summary>
/// <param name="msg"></param>
private void PostProcess(IMessage msg)
{
_attribute.PostProcess(msg);
}
/// <summary>
///
/// </summary>
/// <param name="msg"></param>
/// <returns></returns>
IMessage InvokeMessage(IMessage msg)
{
IMessage returnMsg;
if (msg is IConstructionCallMessage)
{
IConstructionCallMessage ccm = (IConstructionCallMessage)msg;
RemotingServices.GetRealProxy(refObj).InitializeServerObject(ccm);
ObjRef oRef = RemotingServices.Marshal(refObj);
RemotingServices.Unmarshal(oRef);
returnMsg = EnterpriseServicesHelper.CreateConstructionReturnMessage
(ccm,(MarshalByRefObject)this.GetTransparentProxy());
}
else
{
IMethodCallMessage methodMsg = (IMethodCallMessage) msg;
returnMsg = RemotingServices.ExecuteMessage(refObj, methodMsg);
}
return returnMsg;
}
}
}
using System.Runtime.Remoting;
using System.Runtime.Remoting.Proxies;
using System.Runtime.Remoting.Messaging;
using System.Runtime.Remoting.Activation;
using System.Runtime.Remoting.Services;
namespace SharpRush.AOP.Support
{
/// <summary>
/// AOPProxy 的摘要说明。
/// </summary>
public class AOPProxy:RealProxy
{
MarshalByRefObject refObj;
AOPAttribute _attribute;
/// <summary>
///
/// </summary>
public AOPProxy()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
///
/// </summary>
/// <param name="attribute"></param>
/// <param name="type"></param>
/// <param name="obj"></param>
public AOPProxy(AOPAttribute attribute,Type type,MarshalByRefObject obj) : base(type)
{
refObj=obj;
_attribute=attribute;
}
/// <summary>
///
/// </summary>
/// <param name="msg"></param>
/// <returns></returns>
public override IMessage Invoke(IMessage msg)
{
PreProcess(msg);
IMessage returnMsg=InvokeMessage(msg);
PostProcess(returnMsg);
return returnMsg;
}
/// <summary>
///
/// </summary>
/// <param name="msg"></param>
private void PreProcess(IMessage msg)
{
_attribute.PreProcess(msg);
}
/// <summary>
///
/// </summary>
/// <param name="msg"></param>
private void PostProcess(IMessage msg)
{
_attribute.PostProcess(msg);
}
/// <summary>
///
/// </summary>
/// <param name="msg"></param>
/// <returns></returns>
IMessage InvokeMessage(IMessage msg)
{
IMessage returnMsg;
if (msg is IConstructionCallMessage)
{
IConstructionCallMessage ccm = (IConstructionCallMessage)msg;
RemotingServices.GetRealProxy(refObj).InitializeServerObject(ccm);
ObjRef oRef = RemotingServices.Marshal(refObj);
RemotingServices.Unmarshal(oRef);
returnMsg = EnterpriseServicesHelper.CreateConstructionReturnMessage
(ccm,(MarshalByRefObject)this.GetTransparentProxy());
}
else
{
IMethodCallMessage methodMsg = (IMethodCallMessage) msg;
returnMsg = RemotingServices.ExecuteMessage(refObj, methodMsg);
}
return returnMsg;
}
}
}