本文整理汇总了C#中System.Runtime.Remoting.Proxies.RealProxy.Invoke方法的典型用法代码示例。如果您正苦于以下问题:C# RealProxy.Invoke方法的具体用法?C# RealProxy.Invoke怎么用?C# RealProxy.Invoke使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Runtime.Remoting.Proxies.RealProxy
的用法示例。
在下文中一共展示了RealProxy.Invoke方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: InvokeRealProxy
private static void InvokeRealProxy(RealProxy realProxy, WcfInvocation wcfInvocation)
{
var message = new MethodCallMessage(wcfInvocation.Method, wcfInvocation.Arguments);
var returnMessage = (IMethodReturnMessage)realProxy.Invoke(message);
if (returnMessage.Exception != null)
{
throw returnMessage.Exception;
}
wcfInvocation.ReturnValue = returnMessage.ReturnValue;
}
示例2: InvokeRealProxy
private static void InvokeRealProxy(RealProxy realProxy, WcfInvocation wcfInvocation)
{
var message = new MethodCallMessage(wcfInvocation.Method, wcfInvocation.Arguments);
var returnMessage = (IMethodReturnMessage)realProxy.Invoke(message);
if (returnMessage.Exception != null)
{
var exception = ExceptionHelper.PreserveStackTrace(returnMessage.Exception);
throw exception;
}
wcfInvocation.ReturnValue = returnMessage.ReturnValue;
}
示例3: PrivateInvoke
/* this is called from unmanaged code */
internal static object PrivateInvoke (RealProxy rp, IMessage msg, out Exception exc,
out object [] out_args)
{
MonoMethodMessage mMsg = (MonoMethodMessage) msg;
mMsg.LogicalCallContext = CallContext.CreateLogicalCallContext (true);
CallType call_type = mMsg.CallType;
#if MOONLIGHT
bool is_remproxy = false;
#else
bool is_remproxy = (rp is RemotingProxy);
#endif
out_args = null;
IMethodReturnMessage res_msg = null;
if (call_type == CallType.BeginInvoke)
// todo: set CallMessage in runtime instead
mMsg.AsyncResult.CallMessage = mMsg;
if (call_type == CallType.EndInvoke)
res_msg = (IMethodReturnMessage)mMsg.AsyncResult.EndInvoke ();
// Check for constructor msg
if (mMsg.MethodBase.IsConstructor)
{
#if !MOONLIGHT
if (is_remproxy)
res_msg = (IMethodReturnMessage) (rp as RemotingProxy).ActivateRemoteObject ((IMethodMessage) msg);
else
#endif
msg = new ConstructionCall (rp.GetProxiedType ());
}
if (null == res_msg)
{
bool failed = false;
try {
res_msg = (IMethodReturnMessage)rp.Invoke (msg);
} catch (Exception ex) {
failed = true;
if (call_type == CallType.BeginInvoke) {
// If async dispatch crashes, don't propagate the exception.
// The exception will be raised when calling EndInvoke.
mMsg.AsyncResult.SyncProcessMessage (new ReturnMessage (ex, msg as IMethodCallMessage));
res_msg = new ReturnMessage (null, null, 0, null, msg as IMethodCallMessage);
} else
throw;
}
// Note, from begining this code used AsyncResult.IsCompleted for
// checking if it was a remoting or custom proxy, but in some
// cases the remoting proxy finish before the call returns
// causing this method to be called, therefore causing all kind of bugs.
if ((!is_remproxy) && call_type == CallType.BeginInvoke && !failed)
{
IMessage asyncMsg = null;
// allow calltype EndInvoke to finish
asyncMsg = mMsg.AsyncResult.SyncProcessMessage (res_msg as IMessage);
out_args = res_msg.OutArgs;
res_msg = new ReturnMessage (asyncMsg, null, 0, null, res_msg as IMethodCallMessage);
}
}
if (res_msg.LogicalCallContext != null && res_msg.LogicalCallContext.HasInfo)
CallContext.UpdateCurrentCallContext (res_msg.LogicalCallContext);
exc = res_msg.Exception;
// todo: remove throw exception from the runtime invoke
if (null != exc) {
out_args = null;
throw exc.FixRemotingException();
}
else if (res_msg is IConstructionReturnMessage) {
if (out_args == null)
out_args = res_msg.OutArgs;
}
else if (mMsg.CallType == CallType.BeginInvoke) {
// We don't have OutArgs in this case.
}
else if (mMsg.CallType == CallType.Sync) {
out_args = ProcessResponse (res_msg, mMsg);
}
else if (mMsg.CallType == CallType.EndInvoke) {
out_args = ProcessResponse (res_msg, mMsg.AsyncResult.CallMessage);
}
else {
if (out_args == null)
out_args = res_msg.OutArgs;
}
return res_msg.ReturnValue;
}