在代码中从c#调用网页

时间:2008-11-19 17:54:15

标签: c# asp.net .net-2.0

我需要一种从我的.net应用程序中调用网页的方法。

但我只是想向页面发送请求而不用担心响应。

因为有时候响应可能需要一段时间,所以我不希望它挂起应用程序。

我一直在尝试使用page_load事件

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

即使它设置为Async,它仍然会挂起,因为页面不会完成渲染,直到线程已经完成了

7 个答案:

答案 0 :(得分:14)

这应该适合你:

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

WebClient类具有用于在请求完成时通知调用方的事件,但由于您不关心,因此不应该有任何其他内容。

答案 1 :(得分:13)

Doak,几乎就在那里,但每次我将任何请求放在一个sepreate线程中时,在所有线程完成运行之前,页面仍然无法呈现。

我找到的最好方法是调整Doak的方法,只是在那里停留超时并吞下错误。

我知道它是一个黑客,但确实有效:P

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

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

答案 2 :(得分:9)

如果您没有挂起应用程序,则需要从Thread调用该方法。

对于没有答案的HTTP请求,类似的东西应该完成这项工作:

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();
}

答案 3 :(得分:7)

查看System.Net.WebClient,专门使用DownloadDataAsync()方法发送请求,而不会阻止应用的其余部分。

答案 4 :(得分:3)

要在不中断当前页面页面流的情况下进行此过程,我建议您创建一个将为您执行代码的WCF服务。将服务设置为使用单向调用,并在页面上启动对服务的Ajax调用。

答案 5 :(得分:2)

System.Net.WebClient.DownloadDataAsync/DownloadFileAsyncDownloadDataCompleted/DownloadFileCompleted结合使用。

答案 6 :(得分:2)

  1. 据我所知,HttpWebRequest对象的'BeginGetResponse'方法和'EndGetResponse'方法(通过调用WebRequest.Create获得),resp。 BeginGetRequestStream- / EndGetRequestStream方法,HERE尚未反映出来, - 虽然它们在文档中被明确标记为“异步请求”:

    不知道如何运作。

  2. 如果要调用的页面位于同一IIS / App上。作为调用,您可以编写一个过滤器,如果map-string包含要调用的页面的规范(在ISAPI-cpp中:“返回”,则会结束对客户端的此请求的所有服务(您的'调用'aspx-page) SF_STATUS_REQ_FINISHED;“)但也许您在被调用页面中的asp / x / -script执行也被杀死了。检查问题。

  3. 考虑使用服务器端include指令(可调节性较小)或使用Server.Execute动态调用.asp文件。

  4. 不是真正的异步,但可能是值得的:明确地通过一个EARLY Response.End()(或类似的)在系统的调用页面中说明,没有进一步的反应是预期的,主要不是给调用者。然后在CALLED页面的脚本中继续进行。至少等待同步通话结束的时间间隔可以通过10,100左右的最小值来最小化。