views:

3111

answers:

7

I need a way of calling a web page from inside my .net appliction.

But i just want to send a request to the page and not worry about the response.

As there are times when the response can take a while so i dont want it to hang the appliction.

I have been trying in side the page_load event

WebClient webC = new WebClient();
Uri newUri = new Uri("http://localhost:49268/dosomething.aspx");
webC.UploadStringAsync(newUri, string.Empty);

Even though its set to Async, it still seams to hang as the page wont finish remdering until the threads have finsished

+4  A: 

Look at System.Net.WebClient, specifically use the DownloadDataAsync() method to send the request without blocking the rest of the app.

Joel Coehoorn
+3  A: 

For not having you application to hang you will need to call the method from a Thread.

For the HTTP request without an answer, something like that should do the job:

Thread myThread = new Thread(new ThreadStart(myMethodThatDoHttp));
    myThread.Start();
public void myMethodThatDoHttp()
{
 HttpWebRequest request  = (HttpWebRequest)WebRequest.Create("http://www..com");
 HttpWebResponse response = (HttpWebResponse)request.GetResponse();
}
Daok
A: 

Use System.Net.WebClient.DownloadDataAsync/DownloadFileAsync in conjunction with DownloadDataCompleted/DownloadFileCompleted.

baretta
+3  A: 

This should work for you:

System.Net.WebClient client = new System.Net.WebClient();
client.DownloadDataAsync(new Uri("http://some.url.com/some/resource.html"));

The WebClient class has events for notifying the caller when the request is completed, but since you don't care there shouldn't be anything else to it.

ckramer
I agree it should work but the web page wont render back to the broswer until the threads have finished, so it still hangs
TheAlbear
A: 

To have this process without interrupting the page flow of your current page I would recommend creating a WCF service that will execute the code for you. Have the service set to use 1 way calls and on the page initiate an Ajax call to the service.

Chris Marisic
+1  A: 

Doak, Was almost there, but each time I put any of the request in a sepreate thread the page still wouldn't render until all the thread had finished running.

The best way I found was adjusting Doak's method, and just sticking a timeout in there and swallowing the error.

I know its a hack but it does work :P

WebRequest wr = WebRequest.Create("http://localhost:49268/dostuff.aspx");
wr.Timeout = 1000;

try
{
    HttpWebResponse response = (HttpWebResponse)wr.GetResponse();
}
catch (Exception ex)
{
    //We know its going to fail but that dosent matter!!
}
TheAlbear
+1  A: 

Excellent hack, thanks. Was just what I was looking for.

CSharp Programmer
this is not a hack. this is a method()
steven spielberg