c# - 从网络服务向服务器发送 POST

标签 c# .net web-services browser

托管一个 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/

相关文章:

c# - 使用 Linq 比较列表并获取值

java - SOAP 故障 : Failed to assert identity with UsernameToken

c# - ASP.net:依赖于 Web 服务代理类的单元测试

c# - 监听另一个应用程序的退出

c# - 约定 - 具有物理文件夹的项目中的 .net 命名空间

c# - ASP.NET Core 5 Blazor WASM、gRPC、Entity Framework Core 5 : many-to-many results in stack overflow

c# - javascript 对象加载 C# 字典中的值(并将其作为字典 <string,string> 传递)

java - 使用 OAuth 保护 jax-rs

c# - 带有 InitialValue 属性的 ASP.Net RequiredFieldValidator 错误?

c# - 当它附加到刚体时获取统一对撞机的游戏对象