public byte[] SerializedCall(object hostObject, ICallBoxDecoder decoder, byte[] data) { try { decoder.Parse(data); } catch(Exception ex) { return decoder.GetExceptionResponse(ex); } return SerializedCall(hostObject, decoder); }
public byte[] SerializedCall(object hostObject, ICallBoxDecoder decoder) { try { string methodName = decoder.GetMethodName(); CallInfoCacheItem mici; if (CallMap.TryGetValue(methodName, out mici) == false) throw new Exception("MethodName: " + methodName + " not found"); // build parameters object[] callparams = BuildSerializedParameters(decoder, mici); object ret = mici.Call(hostObject, callparams); //object ret = methodinfo.Invoke(hostObject, BindingFlags.ExactBinding, null, callparams, null); if (mici.HasReturn) return decoder.GetOKResponse(ret); return null; } catch (Exception ex) { return decoder.GetExceptionResponse(ex); } }
internal static object[] BuildSerializedParameters(ICallBoxDecoder decoder, CallInfoCacheItem mici) { MethodInfo methodinfo = mici.MI; var paramnames = mici.ParameterNames; var paramtypes = mici.ParameterTypes; object[] callparams = null; if (paramnames.Length != 0) { callparams = new object[paramnames.Length]; for (int i = 0; i < callparams.Length; i++) { if (decoder.TryGetArgument(i, paramnames[i], paramtypes[i], out callparams[i]) == false) { throw new Exception("Argument missing: " + paramnames[i]); } } } return callparams; }