Forum Discussion
Loc_Pham_101863
Feb 04, 2005Historic F5 Account
Mark,
I'm using VS.Net 2003, and I don't currently see the "Bad Request" problem. Using similar code framework (with different interfaces, of course) as below, I'm able to communicate with various versions of BIG-IP (4.x, 4.6.x, 9.x). I'm including some code below so you can reference. Please let us know if this helps.
This is my main C file, ITCMVirtualServerMain.cs
using System;
using ITCMVirtualServer.ITCMVirtualServerWebRef;
namespace ITCMVirtualServer
{
///
/// Summary description for Class1.
///
class Class1
{
private ITCMLocalLBVirtualServer vsObj;
private System.Net.NetworkCredential creds;
private string sHostname = "";
private string sPort = "";
private string sUsername = "";
private string sPassword = "";
private string [] months = new string[12];
///
/// The main entry point for the application.
///
[STAThread]
static void Main(string[] args)
{
System.Net.ServicePointManager.CertificatePolicy = new iControlCertificatePolicy();
Class1 itcmVS = new Class1();
itcmVS.processArgs(args);
try
{
itcmVS.getVirtualAddressList ();
}
catch (System.InvalidOperationException ioe)
{
Console.WriteLine (ioe.ToString());
}
}
public void processArgs(string []args)
{
vsObj = new ITCMLocalLBVirtualServer();
creds = new System.Net.NetworkCredential();
vsObj.Credentials = creds;
if ( args.Length < 4 )
{
usage();
}
else
{
sHostname = args[0];
sPort = args[1];
sUsername = args[2];
sPassword = args[3];
months[0] = "January";
months[1] = "February";
months[2] = "March";
months[3] = "April";
months[4] = "May";
months[5] = "June";
months[6] = "July";
months[7] = "August";
months[8] = "September";
months[9] = "October";
months[10] = "November";
months[11] = "December";
updateConnectionInfo();
}
}
public void usage()
{
Console.WriteLine("Usage: ITCMVirtualServer host port username password");
}
private void updateConnectionInfo()
{
creds.UserName = sUsername;
creds.Password = sPassword;
string sProtocol = "http://";
if (sPort.Equals ("443"))
sProtocol = "https://";
vsObj.Url = sProtocol + sHostname + ":" + sPort + "/iControl/iControlPortal.cgi";
vsObj.PreAuthenticate = true;
}
public void printException(System.Web.Services.Protocols.SoapHeaderException soapHdrEx)
{
Console.WriteLine(soapHdrEx.Message);
}
private void getVirtualAddressList()
{
try
{
Console.WriteLine("==============================================");
Console.WriteLine("Virtual address list");
Console.WriteLine("-------------------");
string [] vlanWildCardList;
string [] virtualAddressList = vsObj.get_virtual_address_list (out vlanWildCardList);
if (vlanWildCardList.Length == 0 && virtualAddressList.Length == 0)
Console.WriteLine ("No virtual addresses");
else
{
Console.WriteLine ("Virtual addresses:");
if (virtualAddressList.Length == 0)
Console.WriteLine (" None");
else
{
for (int i = 0; i < virtualAddressList.Length; i++)
{
Console.WriteLine(" [" + i + "] " + virtualAddressList[ i ]);
}
}
Console.WriteLine ("VLAN wildcard addresses:");
if (virtualAddressList.Length == 0)
Console.WriteLine (" None");
else
{
for (int i = 0; i < vlanWildCardList.Length; i++)
{
Console.WriteLine(" [" + i + "] " + vlanWildCardList[ i ]);
}
}
}
Console.WriteLine("==============================================");
}
catch (System.Web.Services.Protocols.SoapHeaderException soapHdrEx)
{
printException(soapHdrEx);
}
}
}
}
This is the file that handles certificate and authentication, iControlCertificatePolicy.cs:
using System;
using System.Security;
using System.Net;
using System.Security.Cryptography.X509Certificates;
namespace ITCMVirtualServer
{
///
/// Summary description for iControlCertificatePolicy.
///
public class iControlCertificatePolicy : System.Net.ICertificatePolicy
{
public iControlCertificatePolicy()
{
//
// TODO: Add constructor logic here
//
}
public bool CheckValidationResult(System.Net.ServicePoint sp,
System.Security.Cryptography.X509Certificates.X509Certificate certificate,
System.Net.WebRequest request, int problem)
{
return true;
}
}
}