public InvokeResult Invoke(IInvocation invocation) { var instance = SeifApplication.ResolveByName(invocation.ServiceName); var type = instance.GetType(); //var parameters = TypeUtils.ConvertTypeMap(_serializer, invocation.Parameters); var parameterExts = invocation.Parameters.Select(p => ParameterExt.From(p, _serializer)).ToList(); var methodInfo = type.GetMethod(invocation.MethodName, BindingFlags.Instance | BindingFlags.Public, null, parameterExts.Select(p => p.Type).ToArray(), new ParameterModifier[0]); var invokeResult = new InvokeResult(); try { var result = methodInfo.Invoke(instance, parameterExts.Select(p => p.Value).ToArray()); invokeResult.Status = ResultStatus.Success; invokeResult.Message = "调用成功"; invokeResult.Result = _serializer.Serialize(result); } catch (Exception ex) { invokeResult.Status = ResultStatus.UnknownError; invokeResult.Exceptions = new[] { ex }; invokeResult.Message = ex.Message; } return(invokeResult); }
public static void Main() { var clientConfig = new ConsumerConfiguration(); var registry = new GenericRegistry(null, null); SeifApplication.Initialize(registry, null, clientConfig, null); SeifApplication.ReferenceService <IMockService>(new ProxyOptions(), new IInvokeFilter[0]); }
public static void Main() { var servConfig = new ProviderConfiguration(); servConfig.ApiDomain = "api.aaa.com"; var clientConfig = new ConsumerConfiguration(); var registry = new GenericRegistry(null, null); SeifApplication.Initialize(registry, servConfig, clientConfig, null); SeifApplication.ExposeService <IMockService, MockService>(new ServiceConfiguration()); }
public IInvoker CreateInvoker(ServiceRegistryMetta options) { //var exists = SeifApplication.AppEnv.GlobalConfiguration.Invokers.ContainsKey(options.Protocol); //if (!exists) // throw new Exception(string.Format("Cann't find invoker by name {0}", options.Protocol)); //return SeifApplication.AppEnv.GlobalConfiguration.Invokers[options.Protocol]; var serializer = SeifApplication.GetSerializer(options.SerializeMode); switch (options.Protocol.ToUpperInvariant()) { case "HTTPINVOKER": return(new HttpInvoker(options.ServerAddress, serializer, options.Attributes)); default: return(null); } }