托管一个 Web 服务,该服务执行一些 POST
到 ASPX 页面。
代码:
[WebMethod]
public string Test()
{
sb.AppendLine("Start");
try
{
var t = new Thread(MyThreadStartMethod);
t.SetApartmentState(ApartmentState.STA);
t.Start();
t.Join();
}
catch (Exception ex)
{
sb = sb.AppendLine(ex.ToString());
}
sb.AppendLine("Finish");
return sb.ToString();
}
private void MyThreadStartMethod(object obj)
{
try
{
WebBrowser browser = new WebBrowser();
browser.DocumentCompleted += browser_DocumentCompleted;
browser.Url = new Uri("http://www.wikipedia.com");
while (browser.ReadyState != WebBrowserReadyState.Complete)
{
System.Windows.Forms.Application.DoEvents();
Thread.Sleep(60);
}
}
catch (Exception ex)
{
sb = sb.AppendLine(ex.ToString());
}
}
void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
sb = sb.AppendLine("Document completed: " + e.Url);
}
当尝试在我的共享托管服务器上运行它时,我总是遇到超时错误。
尝试了下一个代码来检查我是否可以连接到第三方地址并且它工作正常。
private bool checkUrl(string url)
{
try
{
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "HEAD";
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
return (response.StatusCode == HttpStatusCode.OK);
}
catch
{
return false;
}
}
任何人都可以解释运行第一个代码的问题吗?他们会阻止什么吗?
最佳答案
您必须从代码中删除接下来的两行
System.Windows.Forms.Application.DoEvents();
Thread.Sleep(60);
因为它会阻止您的网络浏览器控件完成导航。
best sample Hans Passant 提出了如何在单独的线程中运行 WebBrowser 控件
关于c# - 从网络服务向服务器发送 POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17966766/