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); }
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)); } }