Пример #1
0
        private string BuildCacheResultKey(SocketAppServerClient.RequestBody rb)
        {
            string cacheResultKey = $"{rb.Controller}-{rb.Action}";

            if (rb.Parameters != null)
            {
                rb.Parameters.ForEach(p => cacheResultKey += $"-{p.Name}:{p.Value}");
            }
            return(cacheResultKey);
        }
Пример #2
0
        public ActionResult RunAction(string receivedData)
        {
            SocketAppServerClient.RequestBody rb = JsonConvert.DeserializeObject <SocketAppServerClient.RequestBody>(receivedData,
                                                                                                                     AppServerConfigurator.SerializerSettings);

            if (rb.Controller.Equals("ServerInfoController") &&
                rb.Action.Equals("FullServerInfo"))
            {
                return(new ServerInfoController().FullServerInfo());
            }

            string    cacheResultKey = BuildCacheResultKey(rb);
            SubServer targetServer   = GetAvailableSubServer();

            if (targetServer == null)
            {
                CheckAllocateNewInstance();

                if (retried)
                {
                    return(ResolveResultOnUreachableServer(cacheResultKey));
                }
                else
                {
                    retried = true;
                    return(RunAction(receivedData));
                }
            }

            using (ISocketClientConnection client = BuildClient(targetServer))
            {
                client.SendRequest(rb);

                SocketAppServerClient.OperationResult result = client.GetResult();

                if (EnabledCachedResultsForUnreachableServers)
                {
                    CacheRepository <SocketAppServerClient.OperationResult> .Set(cacheResultKey, result, 380);
                }

                targetServer.RefreshLifetimeIfHas();
                return(ActionResult.Json(result));
            }
        }