ServicePoint Class

Provides connection management for HTTP connections.

System.Object
  System.Net.ServicePoint

Namespace:  System.Net
Assembly:  System (in System.dll)

'Declaration
Public Class ServicePoint

The ServicePoint type exposes the following members.

  NameDescription
Public propertyAddressGets the Uniform Resource Identifier (URI) of the server that this ServicePoint object connects to.
Public propertyBindIPEndPointDelegateSpecifies the delegate to associate a local IPEndPoint with a ServicePoint.
Public propertyCertificateGets the certificate received for this ServicePoint object.
Public propertyClientCertificateGets the last client certificate sent to the server.
Public propertyConnectionLeaseTimeoutGets or sets the number of milliseconds after which an active ServicePoint connection is closed.
Public propertyConnectionLimitGets or sets the maximum number of connections allowed on this ServicePoint object.
Public propertyConnectionNameGets the connection name.
Public propertyCurrentConnectionsGets the number of open connections associated with this ServicePoint object.
Public propertyExpect100ContinueGets or sets a Boolean value that determines whether 100-Continue behavior is used.
Public propertyIdleSinceGets the date and time that the ServicePoint object was last connected to a host.
Public propertyMaxIdleTimeGets or sets the amount of time a connection associated with the ServicePoint object can remain idle before the connection is closed.
Public propertyProtocolVersionGets the version of the HTTP protocol that the ServicePoint object uses.
Public propertyReceiveBufferSizeGets or sets the size of the receiving buffer for the socket used by this ServicePoint.
Public propertySupportsPipeliningIndicates whether the ServicePoint object supports pipelined connections.
Public propertyUseNagleAlgorithmGets or sets a Boolean value that determines whether the Nagle algorithm is used on connections managed by this ServicePoint object.
Top

  NameDescription
Public methodCloseConnectionGroupRemoves the specified connection group from this ServicePoint object.
Public methodEquals(Object)Determines whether the specified object is equal to the current object. (Inherited from Object.)
Protected methodFinalizeAllows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)
Public methodGetHashCodeServes as the default hash function. (Inherited from Object.)
Public methodGetTypeGets the Type of the current instance. (Inherited from Object.)
Protected methodMemberwiseCloneCreates a shallow copy of the current Object. (Inherited from Object.)
Public methodSetTcpKeepAliveEnables or disables the keep-alive option on a TCP connection.
Public methodToStringReturns a string that represents the current object. (Inherited from Object.)
Top

The ServicePoint class handles connections to an Internet resource based on the host information passed in the resource's Uniform Resource Identifier (URI). The initial connection to the resource determines the information that the ServicePoint object maintains, which is then shared by all subsequent requests to that resource.

ServicePoint objects are managed by the ServicePointManager class and are created, if necessary, by the ServicePointManager.FindServicePoint method. ServicePoint objects are never created directly but are always created and managed by the ServicePointManager class. The maximum number of ServicePoint objects that can be created is set by the ServicePointManager.MaxServicePoints property.

Each ServicePoint object maintains its connection to an Internet resource until it has been idle longer than the time specified in the MaxIdleTime property. When a ServicePoint exceeds the MaxIdleTime value, it can be recycled to another connection. The default value of MaxIdleTime is set by the ServicePointManager.MaxServicePointIdleTime property.

When the ConnectionLeaseTimeout property is set to a value other than -1, and after the specified time elapses, an active ServicePoint connection is closed after it services the next request. This is useful for applications that do not require active connections that are opened indefinitely, as they are by default.

NoteNote

In high load conditions, some applications may run out of free threads in the ThreadPool, which may lead to poor system performance (such as high and variable transaction times). See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/scalenetchapt17.asp for a number of configuration changes you can make to fix this issue.

The following code example creates a ServicePoint object that connects to the 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).   
' Reusing service points in this way can help improve application  performance. 

Imports System
Imports System.Net
Imports System.Threading
Imports System.Text.RegularExpressions

Namespace Mssc.Services.ConnectionManagement
    Module M_TestServicePoint

        Class TestServicePoint
            Private Shared Sub ShowProperties(ByVal sp As ServicePoint)

                Console.WriteLine("Done calling FindServicePoint")

                ' Display the ServicePoint Internet resource address.
                Console.WriteLine(("Address = " + 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.ToString()))

                Console.WriteLine(("ConnectionName = " + sp.ConnectionName))

                ' Display the maximum number of connections allowed on this  
                ' ServicePoint instance.
                Console.WriteLine(("ConnectionLimit = " + sp.ConnectionLimit.ToString()))

                ' Display the number of connections associated with this  
                ' ServicePoint instance.
                Console.WriteLine(("CurrentConnections = " + sp.CurrentConnections.ToString()))

                If sp.Certificate Is Nothing Then
                    Console.WriteLine("Certificate = (null)")
                Else
                    Console.WriteLine(("Certificate = " + sp.Certificate.ToString()))
                End If 

                If sp.ClientCertificate Is Nothing Then
                    Console.WriteLine("ClientCertificate = (null)")
                Else
                    Console.WriteLine(("ClientCertificate = " + sp.ClientCertificate.ToString()))
                End If

                Console.WriteLine("ProtocolVersion = " + sp.ProtocolVersion.ToString())
                Console.WriteLine(("SupportsPipelining = " + sp.SupportsPipelining.ToString()))


                Console.WriteLine("UseNagleAlgorithm = " + sp.UseNagleAlgorithm.ToString())
                Console.WriteLine("Expect 100-continue = " + sp.Expect100Continue.ToString())
            End Sub 'ShowProperties





            Private Shared Sub makeWebRequest(ByVal hashCode As Integer, ByVal Uri As String)
                Dim res As HttpWebResponse = Nothing 

                ' 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. 
                    Dim req As HttpWebRequest = CType(WebRequest.Create(Uri), HttpWebRequest)
                    Console.WriteLine((ControlChars.Lf + "Connecting to " + Uri + " ............"))

                    ' Get the response object.
                    res = CType(req.GetResponse(), HttpWebResponse)
                    Console.WriteLine("Connected." + ControlChars.Lf)
                    Dim currentServicePoint As ServicePoint = req.ServicePoint

                    ' Display new service point properties. 
                    Dim currentHashCode As Integer = currentServicePoint.GetHashCode()
                    Console.WriteLine(("New service point hashcode: " + currentHashCode.ToString()))
                    Console.WriteLine(("New service point max idle time: " + currentServicePoint.MaxIdleTime.ToString()))
                    Console.WriteLine(("New service point is idle since " + currentServicePoint.IdleSince.ToString()))

                    ' Check that a new ServicePoint instance has been created. 
                    If hashCode = currentHashCode Then
                        Console.WriteLine("Service point reused.")
                    Else
                        Console.WriteLine("A new service point created.")
                    End If 
                Catch e As Exception
                    Console.WriteLine(("Source : " + e.Source))
                    Console.WriteLine(("Message : " + e.Message))
                Finally 
                    If Not (res Is Nothing) Then
                        res.Close()
                    End If 
                End Try 
            End Sub 'makeWebRequest


            ' Show the user how to use this program when wrong inputs are entered. 
            Private Shared Sub showUsage()
                Console.WriteLine("Enter the proxy name as follows:")
                Console.WriteLine(ControlChars.Tab + "vb_servicepoint proxyName")
            End Sub 'showusage

            ' This is the program entry point. It allows the user to enter  
            ' a server name that is used to locate its current homepage. 
            Public Shared Sub Main(ByVal args() As String)
                Dim proxy As String = Nothing 
                Dim port As Integer = 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. 
                Dim rex As New Regex("^[a-zA-Z]\w{1,39}$")

                If args.Length = 0 Then 
                    ' Show how to use this program.
                    showUsage()
                    Return 
                End If

                proxy = args(0)
                If (Not (rex.Match(proxy)).Success) Then
                    Console.WriteLine("Input string format not allowed.")
                    Return 
                End If 

                ' Create a proxy object.   
                Dim proxyAdd As String
                proxyAdd = "http://" + proxy + ":" + port.ToString()


                Dim DefaultProxy As 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. 
                Dim Iproxy As IWebProxy = WebRequest.DefaultWebProxy

                ' Set the maximum number of ServicePoint instances to maintain. 
                ' Note that, 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. 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.
                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. 
                Dim MS As New Uri("http://msdn.microsoft.com/")

                ' Use the FindServicePoint method to find an existing  
                ' ServicePoint object or to create a new one.    
                Dim servicePoint As ServicePoint = ServicePointManager.FindServicePoint(MS, Iproxy)
                ShowProperties(servicePoint)
                Dim hashCode As Integer = servicePoint.GetHashCode()
                Console.WriteLine(("Service point hashcode: " + hashCode.ToString()))

                ' 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/")

            End Sub 'Main


        End Class 'TestServicePoint

    End Module 
End Namespace

.NET Framework

Supported in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Was this page helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2014 Microsoft