/// <summary> /// 设置上下文 /// </summary> /// <param name="caller"></param> private void SetOperationContext(AppCaller caller) { OperationContext.Current = new OperationContext { Container = container, Caller = caller }; }
/// <summary> /// 设置上下文 /// </summary> /// <param name="client"></param> /// <param name="caller"></param> private void SetOperationContext(IScsServerClient client, AppCaller caller) { //实例化当前上下文 Type callbackType = null; if (callbackTypes.ContainsKey(caller.ServiceName)) { callbackType = callbackTypes[caller.ServiceName]; } OperationContext.Current = new OperationContext(client, callbackType) { Container = status.Container, Caller = caller }; }
private IService CreateService(AppCaller appCaller) { //处理数据返回InvokeData var serviceKey = "Service_" + appCaller.ServiceName; var service = container.Resolve <IService>(serviceKey); //等待超时 var timeSpan = TimeSpan.FromSeconds(config.Timeout); if (callTimeouts.ContainsKey(appCaller.ServiceName)) { timeSpan = TimeSpan.FromSeconds(callTimeouts[appCaller.ServiceName]); } //启用异步调用服务 return(new AsyncService(smart, container, service, timeSpan)); }
/// <summary> /// 创建AppCaller /// </summary> /// <param name="reqMsg"></param> /// <returns></returns> private AppCaller CreateCaller(RequestMessage reqMsg) { //创建AppCaller对象 var caller = new AppCaller { AppPath = AppDomain.CurrentDomain.BaseDirectory, AppName = reqMsg.AppName, IPAddress = reqMsg.IPAddress, HostName = reqMsg.HostName, ServiceName = reqMsg.ServiceName, MethodName = reqMsg.MethodName, Parameters = reqMsg.Parameters.ToString(), CallTime = DateTime.Now }; return(caller); }
/// <summary> /// 获取AppCaller /// </summary> /// <param name="client"></param> /// <param name="reqMsg"></param> /// <returns></returns> private AppCaller CreateCaller(IScsServerClient client, RequestMessage reqMsg) { //获取AppPath var appPath = (client.State == null) ? null : (client.State as AppClient).AppPath; //服务参数信息 var caller = new AppCaller { AppPath = appPath, AppName = reqMsg.AppName, IPAddress = reqMsg.IPAddress, HostName = reqMsg.HostName, ServiceName = reqMsg.ServiceName, MethodName = reqMsg.MethodName, Parameters = reqMsg.Parameters.ToString(), CallTime = DateTime.Now }; return(caller); }
/// <summary> /// 调用服务,并返回字符串 /// </summary> /// <param name="name"></param> /// <param name="parameters"></param> /// <returns></returns> public string CallMethod(string name, string parameters) { if (callers.ContainsKey(name)) { var caller = callers[name]; var message = new InvokeMessage { ServiceName = caller.Service.FullName, MethodName = caller.Method.ToString(), Parameters = parameters }; string thisKey = string.Format("{0}${1}${2}", message.ServiceName, message.MethodName, message.Parameters); var cacheKey = string.Format("HttpServiceCaller_{0}", IoCHelper.GetMD5String(thisKey)); var invokeData = CacheHelper.Get <InvokeData>(cacheKey); if (invokeData == null) { //获取当前调用者信息 var appCaller = new AppCaller { AppPath = AppDomain.CurrentDomain.BaseDirectory, AppName = "HttpServer", HostName = DnsHelper.GetHostName(), IPAddress = DnsHelper.GetIPAddress(), ServiceName = message.ServiceName, MethodName = message.MethodName, Parameters = message.Parameters, CallTime = DateTime.Now }; //创建服务 var service = CreateService(appCaller); //初始化上下文 SetOperationContext(appCaller); try { //使用Invoke方式调用 var invoke = new InvokeCaller(appCaller.AppName, service); invokeData = invoke.CallMethod(message); //插入缓存 if (invokeData != null && caller.CacheTime > 0) { CacheHelper.Insert(cacheKey, invokeData, caller.CacheTime); } } finally { //初始化上下文 OperationContext.Current = null; } } //如果缓存不为null,则返回缓存数据 if (invokeData != null) { return(invokeData.Value); } } return("null"); }