【问题标题】:Web Browser Control, setting timeout valueWeb浏览器控件,设置超时值
【发布时间】:2013-10-27 14:59:34
【问题描述】:

我正在使用 C# 中的 Web 浏览器在 localhost 服务器上执行 PHP 文件。这个 PHP 脚本实际上是从另一个网站获取信息并对其进行解析。

在我装有 Windows 8 和 Internet Explorer 版本 10 的个人笔记本电脑上,这个 PHP 脚本在 Internet Explorer、Firefox 以及我的 C# 应用程序的 Web 浏览器中执行得很好。

在我朋友的计算机上,它有 Windows 7 和 Internet Explorer 版本 10,相同的 PHP 脚本在 Firefox 中执行得很好。但是,在 Internet Explorer 和我的 C# 应用程序 Web 浏览器中,我都会收到“无法显示此页面”。

剥离有问题的 PHP 脚本(连接到网页并回显“hello”,无需等待来自远程服务器的响应,也无需解析该响应)它工作得很好。

这让我相信在我的朋友 Internet Explorer/C# Web 浏览器组件中一定有一个等待时间较短的超时。这是我能想到的唯一解释。

我可以在 C# 中手动将 Web 浏览器超时设置为不同的值吗?

如果有人怀疑这不是问题所在,我会非常重视您的意见。

【问题讨论】:

  • 您能否定义您使用的 C# Web 浏览器?我猜你正在使用某种库?
  • 我实际上只是使用工具栏中的 Web 浏览器控件。默认情况下包含在 Visual Studio 中的那个(抱歉我在 C# 方面没有太多经验)。
  • 这是 Windows 窗体程序还是 WPF 程序?
  • Windows 窗体程序

标签: c# winforms internet-explorer browser webbrowser-control


【解决方案1】:

WebBrowser 没有超出正常 TCP/IP 堆栈连接和接收超时的任何超时。在 Windows 中是硬连线的,没有 api 可以更改它们。您可以添加注册表项来覆盖超时,但这只会让它们变长。否则,由于 TCP/IP 的工作方式,您永远无法预测连接尝试将花费多长时间,因为没有简单的方法可以发现机器的位置以及路由器跃点数或 哪些 路由器将用于到达那里。

您需要寻找其他原因。

【讨论】:

  • 嗯,我明白你的意思,但这让我陷入了一个完全的谜团。在两台计算机的 Firefox 中打开完全相同的页面。在一台计算机上的 Internet Explorer 中打开完全相同的页面,而在另一台计算机上“此页面无法显示”。在这一点上,我什至不担心我的 C# 应用程序,因为我很确定 C# Web 浏览器只是基于该系统上的 Internet Explorer。
  • 这个答案不正确。 WinINET 维护自己的超时。请参阅这篇写得很好的知识库文章:support.microsoft.com/kb/181050。要更改您自己的应用程序的默认值,请使用所需的超时类型和新值调用 InternetSetOption。
  • 嗯,我相信我们都会很欣赏一位前 IE 团队成员提供的代码 sn-p,它展示了如何从 WebBrowser 中获取 HINTERNET。
  • 对不起,汉斯,我想我误读了您的回答:当您说“TCP/IP 堆栈连接和接收超时”时,我现在认为您指的是 WinINET 分配的超时;这些不是来自 TCP/IP 本身。我认为说这些值仅“允许使它们更长”是不正确的。是的,获得 HINTERNET 并非易事。我假设这是您可以传递 null 的 HINTERNET 的设置之一,但可惜我不再拥有查看此内容的源代码访问权限。
猜你喜欢
  • 2011-01-31
  • 1970-01-01
  • 2017-03-07
  • 1970-01-01
  • 1970-01-01
  • 2014-08-22
  • 2011-08-13
  • 1970-01-01
  • 2013-10-25
相关资源
最近更新 更多