Freigeben über


ServicePoint-Klasse

Stellt Verbindungsverwaltung für HTTP-Verbindungen bereit.

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

Syntax

'Declaration
Public Class ServicePoint
'Usage
Dim instance As ServicePoint
public class ServicePoint
public ref class ServicePoint
public class ServicePoint
public class ServicePoint

Hinweise

Die ServicePoint-Klasse behandelt Verbindungen mit einer Internetressource auf der Grundlage der Hostinformationen, die im URI (Uniform Resource Identifier) der Ressource übergeben werden. Durch die ursprüngliche Verbindung mit der Ressource werden die Informationen bestimmt, die das ServicePoint-Objekt verwaltet, und die dann von allen nachfolgenden Anforderungen an diese Ressource gemeinsam genutzt werden.

ServicePoint-Objekte werden von der ServicePointManager-Klasse verwaltet und bei Bedarf durch die System.Net.ServicePointManager.FindServicePoint-Methode erstellt. Die maximale Anzahl von ServicePoint-Objekten, die erstellt werden können, wird durch die ServicePointManager.MaxServicePoints-Eigenschaft festgelegt.

Die Verbindung jedes ServicePoint-Objekts mit einer Internetressource wird solange aufrechterhalten, bis seine Leerlaufzeit die in der MaxIdleTime-Eigenschaft angegebene Zeitspanne überschreitet. Wenn ein ServicePoint den MaxIdleTime-Wert überschritten hat, kann er für eine andere Verbindung wiederverwendet werden. Der Standardwert von MaxIdleTime wird durch die ServicePointManager.MaxServicePointIdleTime-Eigenschaft festgelegt.

Wenn die ConnectionLeaseTimeout-Eigenschaft auf einen anderen Wert als -1 festgelegt wurde und eine bestimmte Zeitspanne verstrichen ist, wird eine aktive ServicePoint-Verbindung nach der Verarbeitung der nächsten Anforderung geschlossen. Dies ist für Anwendungen sinnvoll, die keine aktiven Verbindungen erfordern, die entsprechend der Standardeinstellung unbegrenzt geöffnet sind.

Hinweis

Unter Hochlastbedingungen ist es möglich, dass für einige Anwendungen keine freien Threads mehr im ThreadPool verfügbar sind. Dies kann zu einer schlechten Systemleistung führen (z. B. hohen und variablen Transaktionszeiten). Eine Reihe von Konfigurationsänderungen, mit denen Sie dieses Problem beheben können, finden Sie unter https://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/scalenetchapt17.asp.

Beispiel

Im folgenden Codebeispiel wird ein ServicePoint-Objekt erstellt, das eine Verbindung mit dem URI www.contoso.com herstellt.

' 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.
                GlobalProxySelection.Select = DefaultProxy

                ' Get the base interface for proxy access for the 
                ' WebRequest-based classes.
                Dim Iproxy As IWebProxy = GlobalProxySelection.Select

                ' 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("https://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, "https://msdn.microsoft.com/library/")

            End Sub 'Main


        End Class 'TestServicePoint

    End Module
End Namespace
// 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 ("\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 ();
            }
        }

        // 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 ("\tcs_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.
            GlobalProxySelection.Select = DefaultProxy;

            // Get the base interface for proxy access for the 
            // WebRequest-based classes.
            IWebProxy Iproxy = GlobalProxySelection.Select;

            // 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 ("https://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, "https://msdn.microsoft.com/library/");
        

            
        }

    }
}
// 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.dll>

using namespace System;
using namespace System::Net;
using namespace System::Threading;
using namespace System::Text::RegularExpressions;
void ShowProperties( ServicePoint^ sp )
{
   Console::WriteLine( "Done calling FindServicePoint()..." );
   
   // Display the ServicePoint Internet resource address.
   Console::WriteLine( "Address = {0}", sp->Address );
   
   // Display the date and time that the ServicePoint was last 
   // connected to a host.
   Console::WriteLine( "IdleSince = {0}", sp->IdleSince );
   
   // 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 = {0}", sp->MaxIdleTime );
   
   Console::WriteLine( "ConnectionName = {0}", sp->ConnectionName );
   
   // Display the maximum number of connections allowed on this 
   // ServicePoint instance.
   Console::WriteLine( "ConnectionLimit = {0}", sp->ConnectionLimit );
   
   // Display the number of connections associated with this 
   // ServicePoint instance.
   Console::WriteLine( "CurrentConnections = {0}", sp->CurrentConnections );
   
   if ( sp->Certificate == nullptr )
      Console::WriteLine( "Certificate = (null)" );
   else
      Console::WriteLine( "Certificate = {0}", sp->Certificate );

   if ( sp->ClientCertificate == nullptr )
      Console::WriteLine( "Client Certificate = (null)" );
   else
      Console::WriteLine( "Client Certificate = {0}", sp->ClientCertificate );

   Console::WriteLine( "ProtocolVersion = {0}", sp->ProtocolVersion->ToString() );
   Console::WriteLine( "SupportsPipelining = {0}", sp->SupportsPipelining );
   
   Console::WriteLine( "UseNagleAlgorithm = {0} ", sp->UseNagleAlgorithm.ToString() );
   Console::WriteLine( "Expect 100-continue = {0}", sp->Expect100Continue.ToString() );
   
}


void makeWebRequest( int hashCode, String^ Uri )
{
   HttpWebResponse^ res = nullptr;
   
   // 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 = dynamic_cast<HttpWebRequest^>(WebRequest::Create( Uri ));
      Console::WriteLine( "\nConnecting to {0} ............", Uri );
      
      // Get the response object.
      res = dynamic_cast<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: {0}", currentHashCode );
      Console::WriteLine( "New service point max idle time: {0}", currentServicePoint->MaxIdleTime );
      Console::WriteLine( "New service point is idle since {0}", 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 : {0}", e->Source );
      Console::WriteLine( "Message : {0}", e->Message );
   }
   finally
   {
      if ( res != nullptr )
            res->Close();
   }

}


// Show the user how to use this program when wrong inputs are entered.
void showUsage()
{
   Console::WriteLine( "Enter the proxy name as follows:" );
   Console::WriteLine( "\tcs_servicepoint proxyName" );
}


int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   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 = gcnew Regex( "^[a-zA-Z]\\w{1,39}$" );
   if ( args->Length < 2 )
   {
      showUsage();
      return  -1;
   }

   String^ proxy = args[ 1 ];
   if ( (rex->Match(proxy))->Success != true )
   {
      Console::WriteLine( "Input string format not allowed." );
      return  -1;
   }

   String^ proxyAdd = String::Format( "http://{0}:{1}", proxy, port );
   
   // Create a proxy object.  
   WebProxy^ DefaultProxy = gcnew WebProxy( proxyAdd,true );
   
   // Set the proxy that all HttpWebRequest instances use.
   GlobalProxySelection::Select = DefaultProxy;
   
   // Get the base interface for proxy access for the 
   // WebRequest-based classes.
   IWebProxy^ Iproxy = GlobalProxySelection::Select;
   
   // 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.
   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 = gcnew Uri( "https://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: {0}", hashCode );
   
   // Make a request with the same scheme identifier and host fragment
   // used to create the previous ServicePoint object.
   makeWebRequest( hashCode, "https://msdn.microsoft.com/library/" );
}
package Mssc.Services.ConnectionManagement ; 
// 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.
import System.*;
import System.Net.*;
import System.Threading.*;
import System.Text.RegularExpressions.*;

class TestServicePoint
{
    private static void ShowProperties(ServicePoint sp)
    {
        Console.WriteLine("Done calling FindServicePoint()...");
        // Display the ServicePoint Internet resource address.
        Console.WriteLine("Address = {0} ", sp.get_Address().ToString());

        // Display the date and time that the ServicePoint was last 
        // connected to a host.
        Console.WriteLine(("IdleSince = " + sp.get_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.get_MaxIdleTime()));

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

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

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

        if (sp.get_Certificate() == null) {
            Console.WriteLine("Certificate = (null)");
        }
        else {
            Console.WriteLine(("Certificate = " 
                + sp.get_Certificate().ToString()));
        }

        if (sp.get_ClientCertificate() == null) {
            Console.WriteLine("ClientCertificate = (null)");
        }
        else {
            Console.WriteLine(("ClientCertificate = " 
                + sp.get_ClientCertificate().ToString()));
        }
        Console.WriteLine(("ProtocolVersion = " 
            + sp.get_ProtocolVersion().ToString()));
        Console.WriteLine(("SupportsPipelining = " 
            + sp.get_SupportsPipelining()));

        Console.WriteLine(("UseNagleAlgorithm = " 
            + System.Convert.ToString(sp.get_UseNagleAlgorithm())));
        Console.WriteLine(("Expect 100-continue = " 
            + System.Convert.ToString(sp.get_Expect100Continue())));
    } //ShowProperties

    private static void MakeWebRequest(int hashCode, String uri) 
        throws InterruptedException
    {
        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.get_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.get_MaxIdleTime()));
            Console.WriteLine(("New service point is idle since " 
                + currentServicePoint.get_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 (System.Exception e) {
            Console.WriteLine(("Source : " + e.get_Source()));
            Console.WriteLine(("Message : " + e.get_Message()));
        }
        finally {
            if ( res  != null  ) {
               res.Close();
            }
         }
    } //MakeWebRequest

    // 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("\tcs_servicepoint proxyName");
    } //ShowUsage

    public static void main(String[] args) throws InterruptedException
    {
        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).get_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.
        GlobalProxySelection.set_Select(defaultProxy);

        // Get the base interface for proxy access for the 
        // WebRequest-based classes.
        IWebProxy iProxy = GlobalProxySelection.get_Select();

        // 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.set_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.set_MaxServicePointIdleTime(10000);

        ServicePointManager.set_UseNagleAlgorithm(true);
        ServicePointManager.set_Expect100Continue(true);
        ServicePointManager.set_CheckCertificateRevocationList(true);
        ServicePointManager.set_DefaultConnectionLimit(
            ServicePointManager.DefaultPersistentConnectionLimit);

        // Create the Uri object for the resource you want to access.
        Uri ms = new Uri("https://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, "https://msdn.microsoft.com/library/");
    } //main 
} //TestServicePoint

Vererbungshierarchie

System.Object
  System.Net.ServicePoint

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0, 1.0

Siehe auch

Referenz

ServicePoint-Member
System.Net-Namespace