Exemple #1
0
 /// <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
            };
        }
Exemple #3
0
        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);
        }
Exemple #6
0
        /// <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");
        }