다음을 통해 공유


HttpWebRequest.KeepAlive 속성

정의

인터넷 리소스에 영구적으로 연결할지 여부를 나타내는 값을 가져오거나 설정합니다.

public:
 property bool KeepAlive { bool get(); void set(bool value); };
public bool KeepAlive { get; set; }
member this.KeepAlive : bool with get, set
Public Property KeepAlive As Boolean

속성 값

인터넷 리소스에 대한 요청에 Keep-alive 값이 있는 Connection HTTP 헤더가 포함되어야 하는지 true. 그렇지 않으면 false. 기본값은 true.

예제

다음 코드 예제에서는 인터넷 리소스와의 영구 연결을 설정 하지 않도록 KeepAlive 속성을 false 설정 합니다.

int main()
{
   try
   {
      
      // Create a new HttpWebRequest object.  Make sure that
      // a default proxy is set if you are behind a firewall.
      HttpWebRequest^ myHttpWebRequest1 = dynamic_cast<HttpWebRequest^>(WebRequest::Create( "http://www.contoso.com" ));
      myHttpWebRequest1->KeepAlive = false;
      
      // Assign the response object of HttpWebRequest to a HttpWebResponse variable.
      HttpWebResponse^ myHttpWebResponse1 = dynamic_cast<HttpWebResponse^>(myHttpWebRequest1->GetResponse());
      Console::WriteLine( "\nThe HTTP request Headers for the first request are: \n {0}", myHttpWebRequest1->Headers );
      Console::WriteLine( "Press Enter Key to Continue.........." );
      Console::Read();
      Stream^ streamResponse = myHttpWebResponse1->GetResponseStream();
      StreamReader^ streamRead = gcnew StreamReader( streamResponse );
      array<Char>^readBuff = gcnew array<Char>(256);
      int count = streamRead->Read( readBuff, 0, 256 );
      Console::WriteLine( "The contents of the Html page are.......\n" );
      while ( count > 0 )
      {
         String^ outputData = gcnew String( readBuff,0,count );
         Console::Write( outputData );
         count = streamRead->Read( readBuff, 0, 256 );
      }
      Console::WriteLine();
      
      // Close the Stream object.
      streamResponse->Close();
      streamRead->Close();
      
      // Release the resources held by response object.
      myHttpWebResponse1->Close();
      
      // Create a new HttpWebRequest object for the specified Uri.
      HttpWebRequest^ myHttpWebRequest2 = dynamic_cast<HttpWebRequest^>(WebRequest::Create( "http://www.contoso.com" ));
      myHttpWebRequest2->Connection = "Close";
      
      // Assign the response object of 'HttpWebRequest' to a 'HttpWebResponse' variable.
      HttpWebResponse^ myHttpWebResponse2 = dynamic_cast<HttpWebResponse^>(myHttpWebRequest2->GetResponse());
      
      // Release the resources held by response object.
      myHttpWebResponse2->Close();
      Console::WriteLine( "\nThe Http RequestHeaders are \n {0}", myHttpWebRequest2->Headers );
      
      Console::WriteLine( "\nPress 'Enter' Key to Continue........." );
      Console::Read();
   }
   catch ( ArgumentException^ e ) 
   {
      Console::WriteLine( "\nThe second HttpWebRequest Object* has raised an Argument Exception as 'Connection' Property is set to 'Close'" );
      Console::WriteLine( "\n {0}", e->Message );
   }
   catch ( WebException^ e ) 
   {
      Console::WriteLine( "WebException raised!" );
      Console::WriteLine( "\n {0}", e->Message );
      Console::WriteLine( "\n {0}", e->Status );
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "Exception raised!" );
      Console::WriteLine( "Source : {0} ", e->Source );
      Console::WriteLine( "Message : {0} ", e->Message );
   }

}

class HttpWebRequest_Connection
{
  static void Main()
  {
    try
    {

      // Create a new HttpWebRequest object.Make sure that
      // a default proxy is set if you are behind a firewall.
      HttpWebRequest myHttpWebRequest1 =
        (HttpWebRequest)WebRequest.Create("http://www.contoso.com");

      myHttpWebRequest1.KeepAlive=false;
      // Assign the response object of HttpWebRequest to a HttpWebResponse variable.
      HttpWebResponse myHttpWebResponse1 =
        (HttpWebResponse)myHttpWebRequest1.GetResponse();

      Console.WriteLine("\nThe HTTP request Headers for the first request are: \n{0}",myHttpWebRequest1.Headers);
      Console.WriteLine("Press Enter Key to Continue..........");
      Console.Read();

      Stream streamResponse=myHttpWebResponse1.GetResponseStream();
      StreamReader streamRead = new StreamReader( streamResponse );
      Char[] readBuff = new Char[256];
      int count = streamRead.Read( readBuff, 0, 256 );
      Console.WriteLine("The contents of the Html page are.......\n");
      while (count > 0)
      {
        String outputData = new String(readBuff, 0, count);
        Console.Write(outputData);
        count = streamRead.Read(readBuff, 0, 256);
      }
      Console.WriteLine();
      // Close the Stream object.
      streamResponse.Close();
      streamRead.Close();
      // Release the resources held by response object.
      myHttpWebResponse1.Close();
      // Create a new HttpWebRequest object for the specified Uri.
      HttpWebRequest myHttpWebRequest2 =
        (HttpWebRequest)WebRequest.Create("http://www.contoso.com");
      myHttpWebRequest2.Connection="Close";
      // Assign the response object of 'HttpWebRequest' to a 'HttpWebResponse' variable.
      HttpWebResponse myHttpWebResponse2 =
        (HttpWebResponse)myHttpWebRequest2.GetResponse();
      // Release the resources held by response object.
      myHttpWebResponse2.Close();
      Console.WriteLine("\nThe Http RequestHeaders are \n{0}",myHttpWebRequest2.Headers);
      Console.WriteLine("\nPress 'Enter' Key to Continue.........");
      Console.Read();
    }
    catch(ArgumentException e)
    {
      Console.WriteLine("\nThe second HttpWebRequest object has raised an Argument Exception as 'Connection' Property is set to 'Close'");
      Console.WriteLine("\n{0}",e.Message);
    }
    catch(WebException e)
    {
      Console.WriteLine("WebException raised!");
      Console.WriteLine("\n{0}",e.Message);
      Console.WriteLine("\n{0}",e.Status);
    }
    catch(Exception e)
    {
      Console.WriteLine("Exception raised!");
      Console.WriteLine("Source :{0} " , e.Source);
      Console.WriteLine("Message :{0} " , e.Message);
    }
  }
}

Class HttpWebRequest_Connection
  
  Shared Sub Main()
    Try

      ' Create a new 'HttpWebRequest' object for the specified Uri. Make sure that 
      ' a default proxy is set if you are behind a firewall.
      Dim myHttpWebRequest1 As HttpWebRequest = CType(WebRequest.Create("http://www.contoso.com"), HttpWebRequest)
      myHttpWebRequest1.KeepAlive = False
      ' Assign the response object of 'HttpWebRequest' to a 'HttpWebResponse' variable.
      Dim myHttpWebResponse1 As HttpWebResponse = CType(myHttpWebRequest1.GetResponse(), HttpWebResponse)

      Console.WriteLine(ControlChars.Cr + "The HTTP request Headers for the first request are {0}", myHttpWebRequest1.Headers)
      Console.WriteLine("Press Enter Key to Continue..........")
      Console.Read()
      Dim streamResponse As Stream = myHttpWebResponse1.GetResponseStream()
      Dim streamRead As New StreamReader(streamResponse)
      Dim readBuff(256) As [Char]
      Dim count As Integer = streamRead.Read(readBuff, 0, 256)
      Console.WriteLine("The contents of the Html page are......." + ControlChars.Cr)
      While count > 0
        Dim outputData As New [String](readBuff, 0, count)
        Console.Write(outputData)
        count = streamRead.Read(readBuff, 0, 256)
      End While
      ' Close the Stream object.
      streamResponse.Close()
      streamRead.Close()
     ' Release the resources held by response object.
      myHttpWebResponse1.Close()
      Console.WriteLine()
     ' Create a new 'HttpWebRequest' object  to the specified Uri.   
      Dim myHttpWebRequest2 As HttpWebRequest = CType(WebRequest.Create("http://www.contoso.com"), HttpWebRequest)
      myHttpWebRequest2.Connection = "Close"
      ' Assign the response object of 'HttpWebRequest' to a 'HttpWebResponse' variable.
      Dim myHttpWebResponse2 As HttpWebResponse = CType(myHttpWebRequest2.GetResponse(), HttpWebResponse)
    ' Release the resources held by response object.
    myHttpWebResponse2.Close()
      Console.WriteLine(ControlChars.Cr + "The Http RequestHeaders are " + ControlChars.Cr + "{0}", myHttpWebRequest2.Headers)
      Console.WriteLine(ControlChars.Cr + "Press 'Enter' Key to Continue.........")
      Console.Read()
    Catch e As ArgumentException
      Console.WriteLine(ControlChars.Cr + "The second HttpWebRequest object has raised an Argument Exception as 'Connection' Property is set to 'Close'")
      Console.WriteLine(ControlChars.Cr + "{0}", e.Message)
    Catch e As WebException
      Console.WriteLine("WebException raised!")
      Console.WriteLine(ControlChars.Cr + "{0}", e.Message)
      Console.WriteLine(ControlChars.Cr + "{0}", e.Status)
    Catch e As Exception
      Console.WriteLine("Exception raised!")
      Console.WriteLine("Source :{0} ", e.Source)
      Console.WriteLine("Message : {0}", e.Message)
    End Try
  End Sub
End Class

설명

주의

WebRequest, HttpWebRequest, ServicePointWebClient 사용되지 않으므로 새 개발에 사용하면 안 됩니다. 대신 HttpClient 사용합니다.

이 속성을 true 설정하여 keep-alive 값이 있는 Connection HTTP 헤더를 보냅니다. 애플리케이션은 KeepAlive 사용하여 영구 연결에 대한 기본 설정을 나타냅니다. KeepAlive 속성이 true애플리케이션은 해당 속성을 지원하는 서버에 영구 연결을 만듭니다.

메모

HTTP/1.1을 사용하는 경우 Keep-Alive 기본적으로 설정됩니다. KeepAlive false 설정하면 서버에 Connection: Close 헤더를 보낼 수 있습니다.

적용 대상