HttpWebRequest.Abort メソッド
インターネット リソースへの要求をキャンセルします。
Overrides Public Sub Abort()
[C#]
public override void Abort();
[C++]
public: void Abort();
[JScript]
public override function Abort();
解説
Abort は、リソースへの要求をキャンセルします。要求をキャンセルした後に、 GetResponse 、 BeginGetResponse 、 EndGetResponse 、 GetRequestStream 、 BeginGetRequestStream 、または EndGetRequestStream を呼び出すと、 WebException が発生し、 Status は RequestCanceled に設定されます。
使用例
[Visual Basic, C#, C++] 非同期要求の場合は、クライアント側のアプリケーションが独自のタイムアウト機能を実装する必要があります。その方法を次の例に示します。
Imports System
Imports System.Net
Imports System.IO
Imports System.Text
Imports System.Threading
Imports Microsoft.VisualBasic
Public Class RequestState
' This class stores the State of the request.
Private BUFFER_SIZE As Integer = 1024
Public requestData As StringBuilder
Public BufferRead() As Byte
Public request As HttpWebRequest
Public response As HttpWebResponse
Public streamResponse As Stream
Public Sub New()
BufferRead = New Byte(BUFFER_SIZE) {}
requestData = New StringBuilder("")
request = Nothing
streamResponse = Nothing
End Sub 'New
End Class 'RequestState
Class HttpWebRequest_BeginGetResponse
Public Shared allDone As New ManualResetEvent(False)
Private BUFFER_SIZE As Integer = 1024
Private DefaultTimeout As Integer = 2 * 60 * 1000
' 2 minutes timeout
' Abort the request if the timer fires.
Private Shared Sub TimeoutCallback(state As Object, timedOut As Boolean)
If timedOut Then
Dim request As HttpWebRequest = state
If Not (request Is Nothing) Then
request.Abort()
End If
End If
End Sub 'TimeoutCallback
Shared Sub Main()
Try
' Create a HttpWebrequest object to the desired URL.
Dim myHttpWebRequest As HttpWebRequest = WebRequest.Create("https://www.contoso.com")
' Create an instance of the RequestState and assign the previous myHttpWebRequest
' object to it's request field.
Dim myRequestState As New RequestState()
myRequestState.request = myHttpWebRequest
Dim myResponse As New HttpWebRequest_BeginGetResponse()
' Start the asynchronous request.
Dim result As IAsyncResult = CType(myHttpWebRequest.BeginGetResponse(New AsyncCallback(AddressOf RespCallback), myRequestState), IAsyncResult)
' this line implements the timeout, if there is a timeout, the callback fires and the request aborts.
ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, New WaitOrTimerCallback(AddressOf TimeoutCallback), myHttpWebRequest, myResponse.DefaultTimeout, True)
' The response came in the allowed time. The work processing will happen in the
' callback function.
allDone.WaitOne()
' Release the HttpWebResponse resource.
myRequestState.response.Close()
Catch e As WebException
Console.WriteLine(ControlChars.Lf + "Main Exception raised!")
Console.WriteLine(ControlChars.Lf + "Message:{0}", e.Message)
Console.WriteLine(ControlChars.Lf + "Status:{0}", e.Status)
Console.WriteLine("Press any key to continue..........")
Catch e As Exception
Console.WriteLine(ControlChars.Lf + "Main Exception raised!")
Console.WriteLine("Source :{0} ", e.Source)
Console.WriteLine("Message :{0} ", e.Message)
Console.WriteLine("Press any key to continue..........")
Console.Read()
End Try
End Sub 'Main
Private Shared Sub RespCallback(asynchronousResult As IAsyncResult)
Try
' State of request is asynchronous.
Dim myRequestState As RequestState = CType(asynchronousResult.AsyncState, RequestState)
Dim myHttpWebRequest As HttpWebRequest = myRequestState.request
myRequestState.response = CType(myHttpWebRequest.EndGetResponse(asynchronousResult), HttpWebResponse)
' Read the response into a Stream object.
Dim responseStream As Stream = myRequestState.response.GetResponseStream()
myRequestState.streamResponse = responseStream
' Begin the Reading of the contents of the HTML page and print it to the console.
Dim asynchronousInputRead As IAsyncResult = responseStream.BeginRead(myRequestState.BufferRead, 0, 1024, New AsyncCallback(AddressOf ReadCallBack), myRequestState)
Return
Catch e As WebException
Console.WriteLine(ControlChars.Lf + "RespCallback Exception raised!")
Console.WriteLine(ControlChars.Lf + "Message:{0}", e.Message)
Console.WriteLine(ControlChars.Lf + "Status:{0}", e.Status)
End Try
allDone.Set()
End Sub 'RespCallback
Private Shared Sub ReadCallBack(asyncResult As IAsyncResult)
Try
Dim myRequestState As RequestState = CType(asyncResult.AsyncState, RequestState)
Dim responseStream As Stream = myRequestState.streamResponse
Dim read As Integer = responseStream.EndRead(asyncResult)
' Read the HTML page and then print it to the console.
If read > 0 Then
myRequestState.requestData.Append(Encoding.ASCII.GetString(myRequestState.BufferRead, 0, read))
Dim asynchronousResult As IAsyncResult = responseStream.BeginRead(myRequestState.BufferRead, 0, 1024, New AsyncCallback(AddressOf ReadCallBack), myRequestState)
Return
Else
Console.WriteLine(ControlChars.Lf + "The contents of the Html page are : ")
If myRequestState.requestData.Length > 1 Then
Dim stringContent As String
stringContent = myRequestState.requestData.ToString()
Console.WriteLine(stringContent)
End If
Console.WriteLine("Press any key to continue..........")
Console.ReadLine()
responseStream.Close()
End If
Catch e As WebException
Console.WriteLine(ControlChars.Lf + "ReadCallBack Exception raised!")
Console.WriteLine(ControlChars.Lf + "Message:{0}", e.Message)
Console.WriteLine(ControlChars.Lf + "Status:{0}", e.Status)
End Try
allDone.Set()
End Sub 'ReadCallBack
End Class 'HttpWebRequest_BeginGetResponse
[C#]
using System;
using System.Net;
using System.IO;
using System.Text;
using System.Threading;
public class RequestState
{
// This class stores the State of the request.
const int BUFFER_SIZE = 1024;
public StringBuilder requestData;
public byte[] BufferRead;
public HttpWebRequest request;
public HttpWebResponse response;
public Stream streamResponse;
public RequestState()
{
BufferRead = new byte[BUFFER_SIZE];
requestData = new StringBuilder("");
request = null;
streamResponse = null;
}
}
class HttpWebRequest_BeginGetResponse
{
public static ManualResetEvent allDone= new ManualResetEvent(false);
const int BUFFER_SIZE = 1024;
const int DefaultTimeout = 2 * 60 * 1000; // 2 minutes timeout
// Abort the request if the timer fires.
private static void TimeoutCallback(object state, bool timedOut) {
if (timedOut) {
HttpWebRequest request = state as HttpWebRequest;
if (request != null) {
request.Abort();
}
}
}
static void Main()
{
try
{
// Create a HttpWebrequest object to the desired URL.
HttpWebRequest myHttpWebRequest= (HttpWebRequest)WebRequest.Create("https://www.contoso.com");
/**
* If you are behind a firewall and you do not have your browser proxy setup
* you need to use the following proxy creation code.
// Create a proxy object.
WebProxy myProxy = new WebProxy();
// Associate a new Uri object to the _wProxy object, using the proxy address
// selected by the user.
myProxy.Address = new Uri("http://myproxy");
// Finally, initialize the Web request object proxy property with the _wProxy
// object.
myHttpWebRequest.Proxy=myProxy;
***/
// Create an instance of the RequestState and assign the previous myHttpWebRequest
// object to it's request field.
RequestState myRequestState = new RequestState();
myRequestState.request = myHttpWebRequest;
// Start the asynchronous request.
IAsyncResult result=
(IAsyncResult) myHttpWebRequest.BeginGetResponse(new AsyncCallback(RespCallback),myRequestState);
// this line impliments the timeout, if there is a timeout, the callback fires and the request becomes aborted
ThreadPool.RegisterWaitForSingleObject (result.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallback), myHttpWebRequest, DefaultTimeout, true);
// The response came in the allowed time. The work processing will happen in the
// callback function.
allDone.WaitOne();
// Release the HttpWebResponse resource.
myRequestState.response.Close();
}
catch(WebException e)
{
Console.WriteLine("\nMain Exception raised!");
Console.WriteLine("\nMessage:{0}",e.Message);
Console.WriteLine("\nStatus:{0}",e.Status);
Console.WriteLine("Press any key to continue..........");
}
catch(Exception e)
{
Console.WriteLine("\nMain Exception raised!");
Console.WriteLine("Source :{0} " , e.Source);
Console.WriteLine("Message :{0} " , e.Message);
Console.WriteLine("Press any key to continue..........");
Console.Read();
}
}
private static void RespCallback(IAsyncResult asynchronousResult)
{
try
{
// State of request is asynchronous.
RequestState myRequestState=(RequestState) asynchronousResult.AsyncState;
HttpWebRequest myHttpWebRequest=myRequestState.request;
myRequestState.response = (HttpWebResponse) myHttpWebRequest.EndGetResponse(asynchronousResult);
// Read the response into a Stream object.
Stream responseStream = myRequestState.response.GetResponseStream();
myRequestState.streamResponse=responseStream;
// Begin the Reading of the contents of the HTML page and print it to the console.
IAsyncResult asynchronousInputRead = responseStream.BeginRead(myRequestState.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), myRequestState);
return;
}
catch(WebException e)
{
Console.WriteLine("\nRespCallback Exception raised!");
Console.WriteLine("\nMessage:{0}",e.Message);
Console.WriteLine("\nStatus:{0}",e.Status);
}
allDone.Set();
}
private static void ReadCallBack(IAsyncResult asyncResult)
{
try
{
RequestState myRequestState = (RequestState)asyncResult.AsyncState;
Stream responseStream = myRequestState.streamResponse;
int read = responseStream.EndRead( asyncResult );
// Read the HTML page and then print it to the console.
if (read > 0)
{
myRequestState.requestData.Append(Encoding.ASCII.GetString(myRequestState.BufferRead, 0, read));
IAsyncResult asynchronousResult = responseStream.BeginRead( myRequestState.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), myRequestState);
return;
}
else
{
Console.WriteLine("\nThe contents of the Html page are : ");
if(myRequestState.requestData.Length>1)
{
string stringContent;
stringContent = myRequestState.requestData.ToString();
Console.WriteLine(stringContent);
}
Console.WriteLine("Press any key to continue..........");
Console.ReadLine();
responseStream.Close();
}
}
catch(WebException e)
{
Console.WriteLine("\nReadCallBack Exception raised!");
Console.WriteLine("\nMessage:{0}",e.Message);
Console.WriteLine("\nStatus:{0}",e.Status);
}
allDone.Set();
}
[C++]
#using <mscorlib.dll>
#using <System.dll>
using namespace System;
using namespace System::Net;
using namespace System::IO;
using namespace System::Text;
using namespace System::Threading;
public __gc class RequestState {
// This class stores the State of the request.
const int BUFFER_SIZE;
public:
StringBuilder* requestData;
Byte BufferRead[];
HttpWebRequest* request;
HttpWebResponse* response;
Stream* streamResponse;
RequestState() : BUFFER_SIZE(1024){
BufferRead = new Byte[BUFFER_SIZE];
requestData = new StringBuilder(S"");
request = 0;
streamResponse = 0;
}
};
__gc class HttpWebRequest_BeginGetResponse {
public:
static ManualResetEvent* allDone = new ManualResetEvent(false);
static const int BUFFER_SIZE = 1024;
static const int DefaultTimeOut = 120000; // 2 minute timeout
// Abort the request if the timer fires.
static void TimeoutCallback(Object* state, bool timedOut) {
if (timedOut) {
HttpWebRequest* request = dynamic_cast<HttpWebRequest*>(state);
if (request != 0) {
request->Abort();
}
}
}
static void RespCallback(IAsyncResult* asynchronousResult) {
try {
// State of request is asynchronous.
RequestState* myRequestState=dynamic_cast<RequestState*> (asynchronousResult->AsyncState);
HttpWebRequest* myHttpWebRequest=myRequestState->request;
myRequestState->response = dynamic_cast<HttpWebResponse*>
(myHttpWebRequest->EndGetResponse(asynchronousResult));
// Read the response into a Stream object.
Stream* responseStream = myRequestState->response->GetResponseStream();
myRequestState->streamResponse=responseStream;
// Begin the Reading of the contents of the HTML page and print it to the console.
IAsyncResult* asynchronousInputRead = responseStream->BeginRead(
myRequestState->BufferRead,
0,
BUFFER_SIZE,
new AsyncCallback(0, ReadCallBack),
myRequestState);
return;
} catch (WebException* e) {
Console::WriteLine(S"\nRespCallback Exception raised!");
Console::WriteLine(S"\nMessage: {0}", e->Message);
Console::WriteLine(S"\nStatus: {0}", __box(e->Status));
}
allDone->Set();
}
static void ReadCallBack(IAsyncResult* asyncResult) {
try {
RequestState * myRequestState = dynamic_cast<RequestState*>(asyncResult->AsyncState);
Stream * responseStream = myRequestState->streamResponse;
int read = responseStream->EndRead(asyncResult);
// Read the HTML page and then print it to the console.
if (read > 0) {
myRequestState->requestData->Append(
Encoding::ASCII->GetString(myRequestState->BufferRead, 0, read));
IAsyncResult* asynchronousResult = responseStream->BeginRead(
myRequestState->BufferRead,
0,
BUFFER_SIZE,
new AsyncCallback(0, ReadCallBack),
myRequestState);
return;
} else {
Console::WriteLine(S"\nThe contents of the Html page are : ");
if (myRequestState->requestData->Length>1) {
String* stringContent;
stringContent = myRequestState->requestData->ToString();
Console::WriteLine(stringContent);
}
Console::WriteLine(S"Press any key to continue..........");
Console::ReadLine();
responseStream->Close();
}
} catch (WebException* e) {
Console::WriteLine(S"\nReadCallBack Exception raised!");
Console::WriteLine(S"\nMessage: {0}", e->Message);
Console::WriteLine(S"\nStatus: {0}", __box(e->Status));
}
allDone->Set();
}
};
int main() {
try {
// Create a HttpWebrequest object to the desired URL.
HttpWebRequest * myHttpWebRequest= dynamic_cast<HttpWebRequest*>
(WebRequest::Create(S"https://www.contoso.com"));
/**
* If you are behind a firewall and you do not have your browser proxy setup
* you need to use the following proxy creation code.
// Create a proxy object.
WebProxy* myProxy = new WebProxy();
// Associate a new Uri object to the _wProxy object, using the proxy address
// selected by the user.
myProxy.Address = new Uri(S"http://myproxy");
// Finally, initialize the Web request object proxy property with the _wProxy
// object.
myHttpWebRequest.Proxy=myProxy;
***/
// Create an instance of the RequestState and assign the previous myHttpWebRequest
// object to its request field.
RequestState* myRequestState = new RequestState();
myRequestState->request = myHttpWebRequest;
// Start the asynchronous request.
IAsyncResult* result= dynamic_cast<IAsyncResult*>(myHttpWebRequest->BeginGetResponse(
new AsyncCallback(0, HttpWebRequest_BeginGetResponse::RespCallback),
myRequestState));
// this line impliments the timeout, if there is a timeout, the callback fires and the request becomes aborted
ThreadPool::RegisterWaitForSingleObject (
result->AsyncWaitHandle,
new WaitOrTimerCallback(0, HttpWebRequest_BeginGetResponse::TimeoutCallback),
myHttpWebRequest,
HttpWebRequest_BeginGetResponse::DefaultTimeOut,
true);
// The response came in the allowed time. The work processing will happen in the
// callback function.
HttpWebRequest_BeginGetResponse::allDone->WaitOne();
// Release the HttpWebResponse resource.
myRequestState->response->Close();
} catch (WebException* e) {
Console::WriteLine(S"\nMain Exception raised!");
Console::WriteLine(S"\nMessage: {0}", e->Message);
Console::WriteLine(S"\nStatus: {0}", __box(e->Status));
Console::WriteLine(S"Press any key to continue..........");
} catch (Exception* e) {
Console::WriteLine(S"\nMain Exception raised!");
Console::WriteLine(S"Source : {0} " , e->Source);
Console::WriteLine(S"Message : {0} " , e->Message);
Console::WriteLine(S"Press any key to continue..........");
Console::Read();
}
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard