// <Snippet6> private static void makeWebRequest(int hashCode, string Uri) { HttpWebResponse res = null; // Make sure that the idle time has elapsed, so that a new // ServicePoint instance is created. Console.WriteLine("Sleeping for 2 sec."); Thread.Sleep(2000); try { // Create a request to the passed URI. HttpWebRequest req = (HttpWebRequest)WebRequest.Create(Uri); Console.WriteLine("\nConnecting to " + Uri + " ............"); // Get the response object. res = (HttpWebResponse)req.GetResponse(); Console.WriteLine("Connected.\n"); ServicePoint currentServicePoint = req.ServicePoint; // Display new service point properties. int currentHashCode = currentServicePoint.GetHashCode(); Console.WriteLine("New service point hashcode: " + currentHashCode); Console.WriteLine("New service point max idle time: " + currentServicePoint.MaxIdleTime); Console.WriteLine("New service point is idle since " + currentServicePoint.IdleSince); // Check that a new ServicePoint instance has been created. if (hashCode == currentHashCode) { Console.WriteLine("Service point reused."); } else { Console.WriteLine("A new service point created."); } } catch (Exception e) { Console.WriteLine("Source : " + e.Source); Console.WriteLine("Message : " + e.Message); } finally { if (res != null) { res.Close(); } } }
// <Snippet7> public static void Main(string[] args) { int port = 80; // Define a regular expression to parse the user's input. // This is a security check. It allows only // alphanumeric input strings between 2 to 40 characters long. Regex rex = new Regex(@"^[a-zA-Z]\w{1,39}$"); if (args.Length < 1) { showUsage(); return; } string proxy = args[0]; if ((rex.Match(proxy)).Success != true) { Console.WriteLine("Input string format not allowed."); return; } string proxyAdd = "http://" + proxy + ":" + port; // Create a proxy object. WebProxy DefaultProxy = new WebProxy(proxyAdd, true); // Set the proxy that all HttpWebRequest instances use. WebRequest.DefaultWebProxy = DefaultProxy; // Get the base interface for proxy access for the // WebRequest-based classes. IWebProxy Iproxy = WebRequest.DefaultWebProxy; // <Snippet8> // Set the maximum number of ServicePoint instances to // maintain. If a ServicePoint instance for that host already // exists when your application requests a connection to // an Internet resource, the ServicePointManager object // returns this existing ServicePoint instance. If none exists // for that host, it creates a new ServicePoint instance. ServicePointManager.MaxServicePoints = 4; // Set the maximum idle time of a ServicePoint instance to 10 seconds. // After the idle time expires, the ServicePoint object is eligible for // garbage collection and cannot be used by the ServicePointManager object. ServicePointManager.MaxServicePointIdleTime = 10000; // </Snippet8> // <Snippet10> ServicePointManager.UseNagleAlgorithm = true; ServicePointManager.Expect100Continue = true; ServicePointManager.CheckCertificateRevocationList = true; ServicePointManager.DefaultConnectionLimit = ServicePointManager.DefaultPersistentConnectionLimit; // </Snippet10> // Create the Uri object for the resource you want to access. Uri MS = new Uri("http://msdn.microsoft.com/"); // Use the FindServicePoint method to find an existing // ServicePoint object or to create a new one. ServicePoint servicePoint = ServicePointManager.FindServicePoint(MS, Iproxy); ShowProperties(servicePoint); int hashCode = servicePoint.GetHashCode(); Console.WriteLine("Service point hashcode: " + hashCode); // Make a request with the same scheme identifier and host fragment // used to create the previous ServicePoint object. makeWebRequest(hashCode, "http://msdn.microsoft.com/library/"); }