• ServicePoint 类


    地址:https://docs.microsoft.com/zh-cn/dotnet/api/system.net.servicepoint?view=netframework-4.7.2

    提供 HTTP 连接的连接管理。

    下面的代码示例创建一个ServicePoint连接到 URI www.contoso.com的对象。

    // This example shows how to use the ServicePoint and ServicePointManager classes.
    // The ServicePointManager class uses the ServicePoint class to manage connections
    // to a remote host. The networking classes reuse service points for all 
    // requests to a given URI. In fact, the same ServicePoint object 
    // is used to issue requests to Internet resources identified by the same
    // scheme identifier (for example,  HTTP) and host fragment (for example,  www.contoso.com).  
    // This should improve your application performance. 
    // Reusing service points in this way can help improve application performance.
    using System;
    using System.Net;
    using System.Threading;
    using System.Text.RegularExpressions;
    
    namespace Mssc.Services.ConnectionManagement
    {
        class TestServicePoint
        {
            private static void ShowProperties(ServicePoint sp)
            {
                Console.WriteLine("Done calling FindServicePoint()...");
    
                // Display the ServicePoint Internet resource address.
                Console.WriteLine("Address = {0} ", sp.Address.ToString());
    
                // Display the date and time that the ServicePoint was last 
                // connected to a host.
                Console.WriteLine("IdleSince = " + sp.IdleSince.ToString());
    
                // Display the maximum length of time that the ServicePoint instance  
                // is allowed to maintain an idle connection to an Internet  
                // resource before it is recycled for use in another connection.
                Console.WriteLine("MaxIdleTime = " + sp.MaxIdleTime);
    
                Console.WriteLine("ConnectionName = " + sp.ConnectionName);
    
                // Display the maximum number of connections allowed on this 
                // ServicePoint instance.
                Console.WriteLine("ConnectionLimit = " + sp.ConnectionLimit);
    
                // Display the number of connections associated with this 
                // ServicePoint instance.
                Console.WriteLine("CurrentConnections = " + sp.CurrentConnections);
    
                if (sp.Certificate == null)
                    Console.WriteLine("Certificate = (null)");
                else
                    Console.WriteLine("Certificate = " + sp.Certificate.ToString());
    
                if (sp.ClientCertificate == null)
                    Console.WriteLine("ClientCertificate = (null)");
                else
                    Console. WriteLine("ClientCertificate = " + sp.ClientCertificate.ToString());
    
                Console.WriteLine("ProtocolVersion = " + sp.ProtocolVersion.ToString());
                Console.WriteLine("SupportsPipelining = " + sp.SupportsPipelining);
    
                Console.WriteLine("UseNagleAlgorithm = " + sp.UseNagleAlgorithm.ToString());
                Console.WriteLine("Expect 100-continue = " + sp.Expect100Continue.ToString());
            }
    
            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("
    Connecting to " + Uri + " ............");
    
                    // Get the response object.
                    res = (HttpWebResponse)req.GetResponse();
                    Console.WriteLine("Connected.
    ");
    
                    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();
                }
            }
    
            // Show the user how to use this program when wrong inputs are entered.
            private static void showUsage()
            {
                Console.WriteLine("Enter the proxy name as follows:");
                Console.WriteLine("	cs_servicepoint proxyName");
            }
    
            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;
    
                // 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;
    
                ServicePointManager.UseNagleAlgorithm = true;
                ServicePointManager.Expect100Continue = true;
                ServicePointManager.CheckCertificateRevocationList = true;
                ServicePointManager.DefaultConnectionLimit = ServicePointManager.DefaultPersistentConnectionLimit;
                // 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/");
            }
        }
    }

    注解

    ServicePoint类根据传递给资源的统一资源标识符 (URI) 中的主机信息来处理与 Internet 资源的连接。

    与资源的初始连接将确定ServicePoint对象维护的信息, 该信息随后由对该资源的所有后续请求共享。

    ServicePoint对象由ServicePointManager类管理, 并根据需要ServicePointManager.FindServicePoint由方法创建。

    ServicePoint永远不会直接创建对象, 而是始终由ServicePointManager类创建和管理对象。

    可创建的最ServicePoint大对象数ServicePointManager.MaxServicePoints由属性设置。

    ServicePoint个对象都保持与 Internet 资源的连接, 直到它的空闲时间超过MaxIdleTime在属性中指定的时间。

    ServicePointMaxIdleTime超出该值时, 可以将其回收到其他连接。

    的默认值MaxIdleTime ServicePointManager.MaxServicePointIdleTime由属性设置。

    如果将ServicePoint属性设置为-1 以外的值, 并且在指定的时间过后, 则在服务下一个请求后将关闭活动连接。

    ConnectionLeaseTimeout 这对于不需要无限期打开的活动连接的应用程序非常有用, 因为这些应用程序默认为。

    -----------------------------------

    demo没有调通,proxy 找不到一个合适的值;

    ………………

    暂时未解决。

  • 相关阅读:
    数据库连接池系列之——c3p0
    spring配置
    flume ng系列之——flume安装
    flume ng之组件介绍
    flume ng之TailSource
    Flume-NG + HDFS + HIVE日志收集分析
    flume+hadoop
    Flume+kafka+storm+hdfs
    IOS中坐标转换
    tabBarItem是模型,只有控件才有textColor属性
  • 原文地址:https://www.cnblogs.com/Tpf386/p/11865095.html
Copyright © 2020-2023  润新知