public T Service <T>(IConnectionToken token) where T : class { var connectionManage = this.serviceProvider.GetService <IConnectionManage>(); var connection = connectionManage.GetConnection(token); return(((IWcfConnection)connection).As <T>()); }
public T Service <T>(IConnectionToken token) where T : ClientBase, new() { var connectionManage = this.serviceProvider.GetService <IConnectionManage>(); var connection = connectionManage.GetConnection(token); return(((IGrpcConnection)connection).As <T>()); }
public Task <T> Delete <T>(IConnectionToken token, string url) { var connectionManage = this.serviceProvider.GetService <IConnectionManage>(); var connection = connectionManage.GetConnection(token) as IWebApiConnection; return(connection.DeleteAsync <T>(url)); }
public Task <T> Put <T>(IConnectionToken token, string url, object data) { var connectionManage = this.serviceProvider.GetService <IConnectionManage>(); var connection = connectionManage.GetConnection(token) as IWebApiConnection; return(connection.PutAsync <T>(url, data)); }
public List <ClusterNode> Filter(IConnectionToken token, List <ClusterNode> nodes) { var list = new List <ClusterNode>(); foreach (var node in nodes) { if (!_context.BlackList.Contains(node)) { list.Add(node); } } return(list); }
public List <ClusterNode> Filter(IConnectionToken token, List <ClusterNode> nodes) { var list = new List <ClusterNode>(); foreach (var node in nodes) { if (!node.Details.ContainsKey("Authorization")) { list.Add(node); } } return(list); }
public List <ClusterNode> Filter(IConnectionToken token, List <ClusterNode> nodes) { IAuthenticatedConnectionToken authtoken = token as IAuthenticatedConnectionToken; var list = new List <ClusterNode>(); foreach (var item in nodes) { if (this.authenticateService.Authenticate(item, authtoken)) { list.Add(item); } } return(list); }
public IClusterConnection GetConnection(IConnectionToken token) { if (Connections.TryGetValue(token.UniqueKey(), out IClusterConnection value)) { return(value); } var nodes = gatewayFilter.GetAvaliableNodes(token); var key = gatewaySelector.GetGateway(nodes); var connection = factory.Get(key) as ClusterConnection; connection.OnRetryConnect += (gateway) => { connection.AcquireLock(); Task.Factory.StartNew(async() => { var node = this.gatewayProvider.GetClusterNode(gateway); await this.clusterNodeProvider.UpdateClusterNode(node, (x) => { x.NoReply++; }); await Task.Delay(TimeSpan.FromSeconds(options.RetryInterval)).ContinueWith(x => { try { if (connection.RetryTimes > options.MaxRetryTimes) { Connections.TryRemove(token.UniqueKey(), out value); return; } var next = gatewaySelector.GetGateway(gatewayFilter.GetAvaliableNodes(token)); connection.UseGateway(next); connection.ReConnect(); } catch { } finally { connection.ReleaseLock(); } }); }); }; connection.OnDisconnected += (gateway) => { Task.Factory.StartNew(async() => { var node = this.gatewayProvider.GetClusterNode(gateway); await this.clusterNodeProvider.UpdateClusterNode(node, (x) => { x.NoReply++; }); context.BlackList.Add(node); await Task.Delay(TimeSpan.FromSeconds(options.RestoreInterval)); context.BlackList.Remove(node); }); }; return(connection); }
public List <ClusterNode> GetAvaliableNodes(IConnectionToken token) { var nodes = context.ClusterNodes; var isAuthenticated = token is IAuthenticatedConnectionToken; foreach (var filter in filters) { if (filter is NoneAuthenticateGatewayFilter && isAuthenticated) { continue; } nodes = filter.Filter(token, nodes); } return(nodes); }
public List <ClusterNode> Filter(IConnectionToken token, List <ClusterNode> nodes) { var list = new List <ClusterNode>(); foreach (var node in nodes) { if (node.Details.TryGetValue("name", out string name)) { if (name.Equals(context.ConnectedServiceName)) { list.Add(node); } } } return(list); }
public List <ClusterNode> Filter(IConnectionToken token, List <ClusterNode> nodes) { var list = new List <ClusterNode>(); foreach (var node in nodes) { if (node.Details.TryGetValue("contract", out string supports)) { if (supports.IndexOf(token.Name()) >= 0) { list.Add(node); } } } return(list); }