ServicePoint 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
提供 HTTP 連接的連接管理。
public ref class ServicePoint
public class ServicePoint
type ServicePoint = class
Public Class ServicePoint
- 繼承
-
ServicePoint
範例
下列程式代碼範例會 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.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.
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.
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( "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: {0}", 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/" );
}
// 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.
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/");
}
}
}
' 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.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
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
' 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
' 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
End Class
End Module
End Namespace
備註
類別 ServicePoint 會根據資源統一資源標識碼 (URI) 中傳遞的主機資訊,處理因特網資源的連線。 資源的初始連接會決定物件所維護的資訊 ServicePoint ,然後由該資源的所有後續要求共用。
ServicePoint 物件是由 ServicePointManager 類別管理,並視需要由 ServicePointManager.FindServicePoint 方法建立。 ServicePoint 對象永遠不會直接建立,但一律由 ServicePointManager 類別建立和管理。 可以建立的物件 ServicePoint 數目上限是由 屬性所 ServicePointManager.MaxServicePoints 設定。
每個 ServicePoint 物件都會維護其與因特網資源的連線,直到其閑置時間超過 屬性中指定的 MaxIdleTime 時間為止。 ServicePoint當超過 MaxIdleTime 值時,它可以回收至另一個連線。 的預設值 MaxIdleTime 是由 屬性所 ServicePointManager.MaxServicePointIdleTime 設定。
ConnectionLeaseTimeout當 屬性設定為 -1 以外的值,且在指定的時間經過之後,作用ServicePoint中的連接會在服務下一個要求之後關閉。 這適用於不需要無限期開啟作用中連線的應用程式,因為它們預設為 。
注意
在高負載情況下,某些應用程式可能會在 ThreadPool 中用盡免費線程,這可能會導致系統效能不佳 (,例如高和可變交易時間) 。
重要
不建議您將 類別用於 ServicePoint
新的開發。 請改用 System.Net.Http.HttpClient 類別。
屬性
Address |
取得這個 ServicePoint 物件連接之伺服器的統一資源識別碼 (URI)。 |
BindIPEndPointDelegate |
指定使本機 IPEndPoint 與 ServicePoint 產生關聯的委派。 |
Certificate |
取得為這個 ServicePoint 物件接收的憑證。 |
ClientCertificate |
取得傳送到伺服器的最後一個用戶端憑證。 |
ConnectionLeaseTimeout |
取得或設定作用中 ServicePoint 連接關閉前的毫秒數。 |
ConnectionLimit |
取得或設定這個 ServicePoint 物件上所允許的最大連接數目。 |
ConnectionName |
取得連接名稱。 |
CurrentConnections |
取得與這個 ServicePoint 物件相關聯的開啟連接數。 |
Expect100Continue |
取得或設定 Boolean 值,用以判斷是否有使用 100-Continue 行為。 |
IdleSince |
取得 ServicePoint 物件上次連接至主機的日期和時間。 |
MaxIdleTime |
取得或設定與 ServicePoint 物件相關聯的連接可以維持閒置的時間量,過了這段時間之後,連接即關閉。 |
ProtocolVersion |
取得 ServicePoint 物件使用的 HTTP 通訊協定版本。 |
ReceiveBufferSize |
取得或設定這個 ServicePoint 所使用之通訊端的接收緩衝區大小。 |
SupportsPipelining |
指出 ServicePoint 物件是否支援以管線連接。 |
UseNagleAlgorithm |
取得或設定 Boolean 值,以決定是否在由此 ServicePoint 物件管理的連接上使用 Nagle 演算法。 |
方法
CloseConnectionGroup(String) |
將指定的連接群組從這個 ServicePoint 物件移除。 |
Equals(Object) |
判斷指定的物件是否等於目前的物件。 (繼承來源 Object) |
GetHashCode() |
傳回 ServicePoint 執行個體的雜湊值。 |
GetHashCode() |
做為預設雜湊函式。 (繼承來源 Object) |
GetType() |
取得目前執行個體的 Type。 (繼承來源 Object) |
MemberwiseClone() |
建立目前 Object 的淺層複製。 (繼承來源 Object) |
SetTcpKeepAlive(Boolean, Int32, Int32) |
啟用或停用 TCP 連線的 Keep-Alive 選項。 |
ToString() |
傳回代表目前物件的字串。 (繼承來源 Object) |
適用於
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應