Rpc Call Proxy
4316 단어 proxy
1. log the time (calling time , etc)
2.Exception handling
This is a RPC caller which handles exception in each call
/// <summary>
/// Remote Procedure Call Proxy
/// Add log(timeline,etc) before/after RPC
/// Handle Remoting Call Exception
/// </summary>
/// <typeparam name="TIn"></typeparam>
public class EdasRpcProxy<TIn>
{
public delegate void ActionRef<TIn>(ref TIn parameter);
public static EdasResult SyncCallRef(ActionRef<TIn> func, ref TIn parameter)
{
return new EdasRpcProxy<TIn>().SynCRef(func, ref parameter);
}
public static EdasResult SyncCall(Action<TIn> action, TIn parameter)
{
return new EdasRpcProxy<TIn>().SynC(action, parameter);
}
private EdasResult SynCRef(ActionRef<TIn> func, ref TIn parameter)
{
try
{
func(ref parameter);
return EdasResult.Create(ResultCode.Ok);
}
catch (Exception ex)
{
return EdasResult.Create(ResultCode.RemoteServerErr,
string.Format(eDASConstants.Messages.RpcCallError, func.Method.Name));
}
}
private EdasResult SynC(Action<TIn> action, TIn parameter)
{
try
{
action(parameter);
return EdasResult.Create(ResultCode.Ok);
}
catch (Exception ex)
{
return EdasResult.Create(ResultCode.RemoteServerErr,
string.Format(eDASConstants.Messages.RpcCallError, action.Method.Name));
}
}
public void AsyncC<TOut>(Func<object, TOut> func, object parameter,
Action<EdasResult<TOut>> callback)
{
Task<TOut>.Factory.StartNew(func, parameter).ContinueWith(
(t =>
{
var entity = t.Result;
if (t.Exception != null)
callback(EdasResult<TOut>.CreateResult(ResultCode.RemoteServerErr, default(TOut),
string.Format
(eDASConstants.Messages.RpcCallError,
func.Method.Name)));
else
callback(EdasResult<TOut>.CreateResult(ResultCode.Ok, entity));
}));
}
}
public class EdasRpcProxy<TIn, TOut>
{
public delegate TOut FuncRef<TIn, TOut>(ref TIn parameter);
public static EdasResult<TOut> SyncCallRef(FuncRef<TIn, TOut> func, ref TIn parameter)
{
return new EdasRpcProxy<TIn, TOut>().SynCRef(func, ref parameter);
}
public static EdasResult<TOut> SyncCall(Func<TIn, TOut> func, TIn parameter)
{
return new EdasRpcProxy<TIn, TOut>().SynC(func, parameter);
}
private EdasResult<TOut> SynCRef(FuncRef<TIn, TOut> func, ref TIn parameter)
{
try
{
var ret = func(ref parameter);
return EdasResult<TOut>.CreateResult(ResultCode.Ok, ret);
}
catch (Exception ex)
{
return EdasResult<TOut>.CreateResult(ResultCode.RemoteServerErr, default(TOut),
string.Format(eDASConstants.Messages.RpcCallError, func.Method.Name));
}
}
private EdasResult<TOut> SynC(Func<TIn, TOut> func, TIn parameter)
{
try
{
var ret = func(parameter);
return EdasResult<TOut>.CreateResult(ResultCode.Ok, ret);
}
catch (Exception ex)
{
return EdasResult<TOut>.CreateResult(ResultCode.RemoteServerErr, default(TOut),
string.Format(eDASConstants.Messages.RpcCallError, func.Method.Name));
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Oxylabs와 셀레늄 프록시 통합웹 스크래핑에 관심이 있다면 웹 사이트 테스트 등을 위해 웹 브라우저 상호 작용을 자동화하는 데 도움이 되는 오픈 소스 도구인 에 대해 들어보셨을 것입니다. 이 테스트 프레임워크는 버튼 클릭, 스크롤 등과 같은 여러...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.