Exemplo n.º 1
0
        public ActionResult Index()
        {
            ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";
            var workers = RoleEnvironment.Roles["WorkerRole1"].Instances;

            ViewBag.Workers = new List <InstanceModel>();
            var leaderId = AzureLeaderElectionProvider.GetCurrentLeaderId();

            foreach (var worker in workers)
            {
                var workerState = GetWorkerState(worker);
                if (worker.Id == leaderId)
                {
                    ViewBag.Workers.Add(new InstanceModel {
                        Id = worker.Id, IsMaster = true, Tenants = workerState.Tenants
                    });
                }
                else
                {
                    ViewBag.Workers.Add(new InstanceModel {
                        Id = worker.Id, IsMaster = false, Tenants = workerState.Tenants
                    });
                }
            }
            return(View());
        }
Exemplo n.º 2
0
        public ActionResult KillTenant(string instanceId, string tenantId)
        {
            var instance = AzureLeaderElectionProvider.GetRoleInstance(instanceId);
            var address  = AzureLeaderElectionProvider.GetInternalServiceUri(instance);

            var channelFactory = new ChannelFactory <ITenantService>(new NetTcpBinding());
            var channel        = channelFactory.CreateChannel(new EndpointAddress(address));

            channel.KillTenant(tenantId);

            return(RedirectToAction("Index"));
        }
Exemplo n.º 3
0
        private RoleStatus GetWorkerState(RoleInstance worker)
        {
            try
            {
                var address = AzureLeaderElectionProvider.GetInternalServiceUri(worker);

                var channelFactory = new ChannelFactory <ITenantService>(new NetTcpBinding());
                var channel        = channelFactory.CreateChannel(new EndpointAddress(address));
                return(channel.GetRoleStatus());
            }
            catch
            {
                return(new RoleStatus()
                {
                    Tenants = new Dictionary <string, TenantStatus>()
                });
            }
        }