Load balancer spillover configuration sample using Csharp and NetScaler XML API

Added by Vishal Ganeriwala , last edited by Vishal Ganeriwala on Apr 29, 2008
Tags: 

Load Balancer configuration sample

Summary

picks traffic when connections on Primary vserver reach a threshold

Code Snippet

using System;
using System.Runtime.Remoting;
using System.Xml.Serialization;
using System.Web.Services;
    
	namespace NSConfig {
		public class ClientService : NSConfigService

                {
                        private static string cookie = null;
                        /* override the getWebRequest to send cookie */
                        protected override System.Net.WebRequest  GetWebRequest(Uri uri)
                        {
                                System.Net.HttpWebRequest req = (System.Net.HttpWebRequest) base.GetWebRequest(uri);
                                if (cookie != null)
                                {
                                        req.Headers.Add("Set-Cookie", cookie);
                                }
                                return req;
                        }
                        /* override the getWebResponse to get the cookie */

                        protected override System.Net.WebResponse GetWebResponse(System.Net.WebRequest req)
                        {
                               System.Net.HttpWebResponse rep = (System.Net.HttpWebResponse) base.GetWebResponse(req);
                               if (rep.Headers["Set-Cookie"] != null)
                                {
                                       cookie = rep.Headers["Set-Cookie"];
                                }
                                return rep;
			}
                        public ClientService()
                        {
                                // Change the IP address pointing to netscaler.
                                this.Url = "http://10.102.4.111:18000";
                        }
                        public ClientService(string servername)
                        {
                                this.Url = "http://"+servername+"/soap";;
                        }
                }
	
	class lb_spillover 
	{
 		static ClientService client=null;
 
		[STAThread]
		static void Main(string[] args)
		{
			if ( args.Length < 3)
			{
				Console.WriteLine("Usage: getConfig <NS IP> username password");
				return;
			}
			string serverip = args[0];
			string username = args[1];
			string password = args[2];
			try {
          			Console.WriteLine("\nConnecting to server "+serverip+" ............\n");
				client = new ClientService(serverip);

				client.CookieContainer = new System.Net.CookieContainer();
				simpleResult result = client.login(username,password) ;
				Console.WriteLine("login : "+result.message);
       
				result = client.enablensfeature(featureEnum.LB);
				Console.WriteLine("enablensfeature	LB : " + result.message);

				result = client.addservice("svc1",null,"10.102.3.81",servicetypeEnum.HTTP,80,0xFFFFFFFF,cachtypeEnum.VALNOTSET,enabledisabledEnum.VALNOTSET);
				Console.WriteLine("addservice	svc1 : " + result.message);

				result = client.addservice("svc2",null,"10.102.3.82",servicetypeEnum.HTTP,80,0xFFFFFFFF,cachtypeEnum.VALNOTSET,enabledisabledEnum.VALNOTSET);
				Console.WriteLine("addservice	svc2 : " + result.message);

				result = client.addservice("svc_backup",null,"10.102.3.83",servicetypeEnum.HTTP,80,0xFFFFFFFF,cachtypeEnum.VALNOTSET,enabledisabledEnum.VALNOTSET);
				Console.WriteLine("addservice	svc_backup : " + result.message);

				getserviceResult  getserviceresult1 = client.getservice(null,false,false);
				Console.WriteLine("getservice	null : " + getserviceresult1.message);

				if ( (getserviceresult1.List != null) && (getserviceresult1.List.Length > 0)) {
					for(int i =0 ; i < getserviceresult1.List.Length;i++) { 
						service obj;
						obj = (service) getserviceresult1.List[i];
						Console.WriteLine( obj.name + "\t" + obj.all + "\t" + obj.internaL + "\t" + obj.servername + "\t" + obj.servicetype + "\t" + obj.serviceconftpye + "\t" + obj.port + "\t" + obj.value + "\t" + obj.cleartextport + "\t" + obj.gslb + "\t" + obj.cachetype + "\t" + obj.maxclient + "\t" + obj.maxreq + "\t" + obj.cacheable + "\t" + obj.cip + "\t" + obj.cipheader + "\t" + obj.usip + "\t" + obj.sc + "\t" + obj.weight + "\t" + obj.sp + "\t" + obj.failedprobes + "\t" + obj.clttimeout + "\t" + obj.totalprobes + "\t" + obj.svrtimeout + "\t" + obj.totalfailedprobes + "\t" + obj.serverid + "\t" + obj.cka + "\t" + obj.tcpb + "\t" + obj.cmp + "\t" + obj.maxbandwidth + "\t" + obj.accessdown + "\t" + obj.svrstate + "\t" + obj.ipaddress + "\t" + obj.monitorname + "\t" + obj.monthreshold + "\t" + obj.monstate + "\t" + obj.monstatcode + "\t" + obj.responsetime + "\t" + obj.downstateflush + "\t" + obj.statechangetimesec + "\t" + obj.statechangetimemsec + "\t" + obj.timesincelaststatechange + "\t" + obj.tickssincelaststatechange + "\t" + obj.scpolicyname + "\t" + obj.dospolicyname + "\t" );
					}
				}

				result = client.addlbvserver("vlb_primary",vservicetypeEnum.HTTP,"10.102.3.101",80,0xFFFFFFFF,enabledisabledEnum.VALNOTSET,null);
				Console.WriteLine("addlbvserver	vlb_primary : " + result.message);

				result = client.addlbvserver("vlb_backup",vservicetypeEnum.HTTP,"10.102.3.103",80,0xFFFFFFFF,enabledisabledEnum.VALNOTSET,null);
				Console.WriteLine("addlbvserver	vlb_backup : " + result.message);

				getvserverResult  getvserverresult2 = client.getvserver(null);
				Console.WriteLine("getvserver	null : " + getvserverresult2.message);

				if ( (getvserverresult2.List != null) && (getvserverresult2.List.Length > 0)) {
					for(int i =0 ; i < getvserverresult2.List.Length;i++) { 
						vserver obj;
						obj = (vserver) getvserverresult2.List[i];
						Console.WriteLine( obj.name + "\t" + obj.insertvserveripport + "\t" + obj.vipheader + "\t" + obj.ipaddress + "\t" + obj.port + "\t" + obj.range + "\t" + obj.servicetype + "\t" + obj.value + "\t" + obj.type + "\t" + obj.state + "\t" + obj.effectivestate + "\t" + obj.status + "\t" + obj.cachetype + "\t" + obj.redirect + "\t" + obj.precedence + "\t" + obj.redirecturl + "\t" + obj.authentication + "\t" + obj.homepage + "\t" + obj.dnsvservername + "\t" + obj.domain + "\t" + obj.rule + "\t" + obj.policyname + "\t" + obj.hits + "\t" + obj.servicename + "\t" + obj.weight + "\t" + obj.cachevserver + "\t" + obj.backupvserver + "\t" + obj.priority + "\t" + obj.clttimeout + "\t" + obj.somethod + "\t" + obj.sopersistence + "\t" + obj.sothreshold + "\t" + obj.lbmethod + "\t" + obj.hashlength + "\t" + obj.dataoffset + "\t" + obj.datalength + "\t" + obj.netmask + "\t" + obj.groupname + "\t" + obj.m + "\t" + obj.persistencetype + "\t" + obj.cookiedomain + "\t" + obj.persistmask + "\t" + obj.persistencebackup + "\t" + obj.timeout + "\t" + obj.cacheable + "\t" + obj.pq + "\t" + obj.sc + "\t" + obj.sessionless + "\t" + obj.sopersistencetimeout + "\t" + obj.url + "\t" + obj.reuse + "\t" + obj.destinationvserver + "\t" + obj.via + "\t" + obj.flags + "\t" + obj.connfailover + "\t" + obj.casesensitive + "\t" + obj.redirectportrewrite + "\t" + obj.downstateflush + "\t" + obj.cookieipport + "\t" + obj.vserverid + "\t" + obj.version + "\t" );
					}
				}

				result = client.bindlbvserver_service("vlb_primary","svc1",0xFFFFFFFF);
				Console.WriteLine("bindlbvserver_service	vlb_primary : " + result.message);

				result = client.bindlbvserver_service("vlb_primary","svc2",0xFFFFFFFF);
				Console.WriteLine("bindlbvserver_service	vlb_primary : " + result.message);

				result = client.bindlbvserver_service("vlb_backup","svc_backup",0xFFFFFFFF);
				Console.WriteLine("bindlbvserver_service	vlb_backup : " + result.message);

				getvserverResult  getvserverresult3 = client.getvserver("vlb_primary");
				Console.WriteLine("getvserver	vlb_primary : " + getvserverresult3.message);

				if ( (getvserverresult3.List != null) && (getvserverresult3.List.Length > 0)) {
					for(int i =0 ; i < getvserverresult3.List.Length;i++) { 
						vserver obj;
						obj = (vserver) getvserverresult3.List[i];
						Console.WriteLine( obj.name + "\t" + obj.insertvserveripport + "\t" + obj.vipheader + "\t" + obj.ipaddress + "\t" + obj.port + "\t" + obj.range + "\t" + obj.servicetype + "\t" + obj.value + "\t" + obj.type + "\t" + obj.state + "\t" + obj.effectivestate + "\t" + obj.status + "\t" + obj.cachetype + "\t" + obj.redirect + "\t" + obj.precedence + "\t" + obj.redirecturl + "\t" + obj.authentication + "\t" + obj.homepage + "\t" + obj.dnsvservername + "\t" + obj.domain + "\t" + obj.rule + "\t" + obj.policyname + "\t" + obj.hits + "\t" + obj.servicename + "\t" + obj.weight + "\t" + obj.cachevserver + "\t" + obj.backupvserver + "\t" + obj.priority + "\t" + obj.clttimeout + "\t" + obj.somethod + "\t" + obj.sopersistence + "\t" + obj.sothreshold + "\t" + obj.lbmethod + "\t" + obj.hashlength + "\t" + obj.dataoffset + "\t" + obj.datalength + "\t" + obj.netmask + "\t" + obj.groupname + "\t" + obj.m + "\t" + obj.persistencetype + "\t" + obj.cookiedomain + "\t" + obj.persistmask + "\t" + obj.persistencebackup + "\t" + obj.timeout + "\t" + obj.cacheable + "\t" + obj.pq + "\t" + obj.sc + "\t" + obj.sessionless + "\t" + obj.sopersistencetimeout + "\t" + obj.url + "\t" + obj.reuse + "\t" + obj.destinationvserver + "\t" + obj.via + "\t" + obj.flags + "\t" + obj.connfailover + "\t" + obj.casesensitive + "\t" + obj.redirectportrewrite + "\t" + obj.downstateflush + "\t" + obj.cookieipport + "\t" + obj.vserverid + "\t" + obj.version + "\t" );
					}
				}

				getvserverResult  getvserverresult4 = client.getvserver("vlb_backup");
				Console.WriteLine("getvserver	vlb_backup : " + getvserverresult4.message);

				if ( (getvserverresult4.List != null) && (getvserverresult4.List.Length > 0)) {
					for(int i =0 ; i < getvserverresult4.List.Length;i++) { 
						vserver obj;
						obj = (vserver) getvserverresult4.List[i];
						Console.WriteLine( obj.name + "\t" + obj.insertvserveripport + "\t" + obj.vipheader + "\t" + obj.ipaddress + "\t" + obj.port + "\t" + obj.range + "\t" + obj.servicetype + "\t" + obj.value + "\t" + obj.type + "\t" + obj.state + "\t" + obj.effectivestate + "\t" + obj.status + "\t" + obj.cachetype + "\t" + obj.redirect + "\t" + obj.precedence + "\t" + obj.redirecturl + "\t" + obj.authentication + "\t" + obj.homepage + "\t" + obj.dnsvservername + "\t" + obj.domain + "\t" + obj.rule + "\t" + obj.policyname + "\t" + obj.hits + "\t" + obj.servicename + "\t" + obj.weight + "\t" + obj.cachevserver + "\t" + obj.backupvserver + "\t" + obj.priority + "\t" + obj.clttimeout + "\t" + obj.somethod + "\t" + obj.sopersistence + "\t" + obj.sothreshold + "\t" + obj.lbmethod + "\t" + obj.hashlength + "\t" + obj.dataoffset + "\t" + obj.datalength + "\t" + obj.netmask + "\t" + obj.groupname + "\t" + obj.m + "\t" + obj.persistencetype + "\t" + obj.cookiedomain + "\t" + obj.persistmask + "\t" + obj.persistencebackup + "\t" + obj.timeout + "\t" + obj.cacheable + "\t" + obj.pq + "\t" + obj.sc + "\t" + obj.sessionless + "\t" + obj.sopersistencetimeout + "\t" + obj.url + "\t" + obj.reuse + "\t" + obj.destinationvserver + "\t" + obj.via + "\t" + obj.flags + "\t" + obj.connfailover + "\t" + obj.casesensitive + "\t" + obj.redirectportrewrite + "\t" + obj.downstateflush + "\t" + obj.cookieipport + "\t" + obj.vserverid + "\t" + obj.version + "\t" );
					}
				}

				result = client.setlbvserver_backupvserver("vlb_primary","vlb_backup");
				Console.WriteLine("setlbvserver_backupvserver	vlb_primary : " + result.message);

				result = client.setlbvserver_somethod("vlb_primary",spillovermethodsEnum.CONNECTION);
				Console.WriteLine("setlbvserver_somethod	vlb_primary : " + result.message);

				result = client.setlbvserver_sothreshold("vlb_primary",1000);
				Console.WriteLine("setlbvserver_sothreshold	vlb_primary : " + result.message);

				getvserverResult  getvserverresult5 = client.getvserver("vlb_primary");
				Console.WriteLine("getvserver	vlb_primary : " + getvserverresult5.message);

				if ( (getvserverresult5.List != null) && (getvserverresult5.List.Length > 0)) {
					for(int i =0 ; i < getvserverresult5.List.Length;i++) { 
						vserver obj;
						obj = (vserver) getvserverresult5.List[i];
						Console.WriteLine( obj.name + "\t" + obj.insertvserveripport + "\t" + obj.vipheader + "\t" + obj.ipaddress + "\t" + obj.port + "\t" + obj.range + "\t" + obj.servicetype + "\t" + obj.value + "\t" + obj.type + "\t" + obj.state + "\t" + obj.effectivestate + "\t" + obj.status + "\t" + obj.cachetype + "\t" + obj.redirect + "\t" + obj.precedence + "\t" + obj.redirecturl + "\t" + obj.authentication + "\t" + obj.homepage + "\t" + obj.dnsvservername + "\t" + obj.domain + "\t" + obj.rule + "\t" + obj.policyname + "\t" + obj.hits + "\t" + obj.servicename + "\t" + obj.weight + "\t" + obj.cachevserver + "\t" + obj.backupvserver + "\t" + obj.priority + "\t" + obj.clttimeout + "\t" + obj.somethod + "\t" + obj.sopersistence + "\t" + obj.sothreshold + "\t" + obj.lbmethod + "\t" + obj.hashlength + "\t" + obj.dataoffset + "\t" + obj.datalength + "\t" + obj.netmask + "\t" + obj.groupname + "\t" + obj.m + "\t" + obj.persistencetype + "\t" + obj.cookiedomain + "\t" + obj.persistmask + "\t" + obj.persistencebackup + "\t" + obj.timeout + "\t" + obj.cacheable + "\t" + obj.pq + "\t" + obj.sc + "\t" + obj.sessionless + "\t" + obj.sopersistencetimeout + "\t" + obj.url + "\t" + obj.reuse + "\t" + obj.destinationvserver + "\t" + obj.via + "\t" + obj.flags + "\t" + obj.connfailover + "\t" + obj.casesensitive + "\t" + obj.redirectportrewrite + "\t" + obj.downstateflush + "\t" + obj.cookieipport + "\t" + obj.vserverid + "\t" + obj.version + "\t" );
					}
				}

				result = client.setlbvserver_sopersistence("vlb_primary",enabledisabledEnum.ENABLED);
				Console.WriteLine("setlbvserver_sopersistence	vlb_primary : " + result.message);

				result = client.setlbvserver_sopersistencetimeout("vlb_primary",3);
				Console.WriteLine("setlbvserver_sopersistencetimeout	vlb_primary : " + result.message);

				result = client.setservice_maxclient("svc1",500);
				Console.WriteLine("setservice_maxclient	svc1 : " + result.message);

				result = client.setservice_maxclient("svc2",500);
				Console.WriteLine("setservice_maxclient	svc2 : " + result.message);

				result = client.setlbvserver_backupvserver("vlb_primary","vlb_backup");
				Console.WriteLine("setlbvserver_backupvserver	vlb_primary : " + result.message);

				result = client.setlbvserver_somethod("vlb_primary",spillovermethodsEnum.DYNAMICCONNECTION);
				Console.WriteLine("setlbvserver_somethod	vlb_primary : " + result.message);

				getvserverResult  getvserverresult6 = client.getvserver("vlb_primary");
				Console.WriteLine("getvserver	vlb_primary : " + getvserverresult6.message);

				if ( (getvserverresult6.List != null) && (getvserverresult6.List.Length > 0)) {
					for(int i =0 ; i < getvserverresult6.List.Length;i++) { 
						vserver obj;
						obj = (vserver) getvserverresult6.List[i];
						Console.WriteLine( obj.name + "\t" + obj.insertvserveripport + "\t" + obj.vipheader + "\t" + obj.ipaddress + "\t" + obj.port + "\t" + obj.range + "\t" + obj.servicetype + "\t" + obj.value + "\t" + obj.type + "\t" + obj.state + "\t" + obj.effectivestate + "\t" + obj.status + "\t" + obj.cachetype + "\t" + obj.redirect + "\t" + obj.precedence + "\t" + obj.redirecturl + "\t" + obj.authentication + "\t" + obj.homepage + "\t" + obj.dnsvservername + "\t" + obj.domain + "\t" + obj.rule + "\t" + obj.policyname + "\t" + obj.hits + "\t" + obj.servicename + "\t" + obj.weight + "\t" + obj.cachevserver + "\t" + obj.backupvserver + "\t" + obj.priority + "\t" + obj.clttimeout + "\t" + obj.somethod + "\t" + obj.sopersistence + "\t" + obj.sothreshold + "\t" + obj.lbmethod + "\t" + obj.hashlength + "\t" + obj.dataoffset + "\t" + obj.datalength + "\t" + obj.netmask + "\t" + obj.groupname + "\t" + obj.m + "\t" + obj.persistencetype + "\t" + obj.cookiedomain + "\t" + obj.persistmask + "\t" + obj.persistencebackup + "\t" + obj.timeout + "\t" + obj.cacheable + "\t" + obj.pq + "\t" + obj.sc + "\t" + obj.sessionless + "\t" + obj.sopersistencetimeout + "\t" + obj.url + "\t" + obj.reuse + "\t" + obj.destinationvserver + "\t" + obj.via + "\t" + obj.flags + "\t" + obj.connfailover + "\t" + obj.casesensitive + "\t" + obj.redirectportrewrite + "\t" + obj.downstateflush + "\t" + obj.cookieipport + "\t" + obj.vserverid + "\t" + obj.version + "\t" );
					}
				}

				result = client.logout();
				Console.WriteLine("logout : " + result.message); 
			}
			catch (Exception ex) {
			      Console.WriteLine( "Exception: "+ex.ToString());
			}
		}

	}
	}

More Information