【问题标题】:"A connection attempt failed because the connected party did not properly respond after a period of time" using WebClient“连接尝试失败,因为连接方在一段时间后没有正确响应”使用 WebClient
【发布时间】:2013-07-17 07:07:41
【问题描述】:

我正在使用以下在本地机器上运行的代码,但是当我在服务器上尝试相同的代码时,它会抛出错误

连接尝试失败,因为连接方在一段时间后没有正确响应,或建立连接 失败,因为连接的主机没有响应

这是我的代码:

WebClient client = new WebClient();
// Add a user agent header in case the 
// requested URI contains a query.
//client.Headers.Add ("ID", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
Stream data = client.OpenRead("http://" + Request.ServerVariables["HTTP_HOST"] + Request.ApplicationPath + "/PageDetails.aspx?ModuleID=" + ID);
StreamReader reader = new StreamReader(data);
string s = reader.ReadToEnd();
Console.WriteLine(s);
data.Close();
reader.Close();

我收到错误

Stream data = client.OpenRead("http://" + Request.ServerVariables["HTTP_HOST"] + Request.ApplicationPath + "/PageDetails.aspx?ModuleID=" + ID);

是因为防火墙设置吗?

【问题讨论】:

  • 尝试在浏览器中浏览网址
  • @EhsanUllah 是的,我已经完成了这一步,当我将生成的 URL 复制并粘贴到另一个选项卡(浏览器选项卡)时,它工作正常
  • 最近遇到此错误消息,因为我在 VNP 中,不允许我访问 S3 存储桶。如果有人遇到此问题,请放在这里可能会有所帮助

标签: c# sockets webclient


【解决方案1】:

我遇到了类似的问题,必须使用以下方法将 URL 从字符串转换为 Uri 对象:

Uri myUri = new Uri(URLInStringFormat, UriKind.Absolute);

(URLInStringFormat 是您的网址) 尝试使用 Uri 而不是字符串作为连接:

WebClient client = new WebClient();
client.OpenRead(myUri);

【讨论】:

    【解决方案2】:

    web.config 中明确设置代理地址解决了我的问题

    <system.net> 
        <defaultProxy> 
                <proxy usesystemdefault = "false" proxyaddress="http://address:port" bypassonlocal="false"/> 
        </defaultProxy> 
    </system.net>
    

    Resolving the “TCP error code 10060: A connection attempt failed…” while consuming a web service

    【讨论】:

    • 我的代码在 VS 中运行时可以正常工作,但在同一台服务器上部署到 IIS 时我得到了它。像这样显式添加代理设置解决了这个问题。
    • 这里需要添加什么代理地址。
    • @Rajasekar 您网络中代理服务器的 ip 或 url。
    【解决方案3】:

    我知道这张票很旧,但我刚刚遇到了这个问题,我想我会发布发生在我身上的事情以及我是如何解决的:

    在我调用的服务中,有人调用了另一个 Web 服务。像傻瓜一样,我在发布 Web 服务时忘记确保 DNS 设置正确,因此我的 Web 服务在发布时试图从 api.myproductionserver.local 调用,而不是 api.myproductionserver.com。导致超时的是后端 Web 服务。

    无论如何,我想我会传递这个。

    【讨论】:

      【解决方案4】:

      web.config 中添加以下代码块解决了我的问题

       <system.net>
          <defaultProxy enabled="false" >
          </defaultProxy>
        </system.net>
      

      【讨论】:

        【解决方案5】:

        我知道这篇文章是 5 年前发布的,但我最近遇到了这个问题。这可能是由公司网络限制引起的。所以我的解决方案是让WebClient 通过代理服务器拨打电话。这是对我有用的代码。希望对您有所帮助。

                using (WebClient client = new WebClient())
                {
                    client.Encoding = Encoding.UTF8;
                    WebProxy proxy = new WebProxy("your proxy host IP", port);
                    client.Proxy = proxy;
                    string sourceUrl = "xxxxxx";
                    try
                    {
                        using (Stream stream = client.OpenRead(new Uri(noaaSourceUrl)))
                        {
                            //......
                        }
                    }
                    catch (Exception ex)
                    {
                        throw;
                    }
                }
        

        【讨论】:

          【解决方案6】:

          这段代码可以在浏览器中访问的 URL 吗?

          http://" + Request.ServerVariables["HTTP_HOST"] + Request.ApplicationPath + "/PageDetails.aspx?ModuleID=" + ID
          

          您需要验证的第一件事是您创建的 URL 是否正确。然后在浏览器中检查它是否正在浏览。然后使用Fiddler 工具检查通过网络传递的内容。可能是通过代码调用的URL被错误的转义了。

          然后检查防火墙相关问题。

          【讨论】:

          • 是的,我已经检查过了,它创建了有效的 URL,我已经尝试过这个东西
          • 您是否使用 Fiddler 验证了正在传递的 URL 是否正确?
          • 当您通过代码进行调用时,fiddler 显示的调用状态是什么?
          【解决方案7】:

          我遇到了这个问题。代码在本地运行时运行良好,但在服务器上运行时却不行。 使用 psPing (https://technet.microsoft.com/en-us/sysinternals/psping.aspx) 我意识到应用程序端口没有返回任何内容。 原来是防火墙问题。我没有在 Windows 防火墙中启用我的应用程序端口。

          管理工具 > 高级安全 Windows 防火墙 将我的应用程序端口添加到入站规则并开始工作。

          不知何故,应用程序端口号已更改,因此需要一段时间才能弄清楚发生了什么 - 所以我想我会分享这种可能性,以防它节省其他人的时间......

          【讨论】:

            【解决方案8】:

            在我的情况下,我收到此错误是因为我的域未列在服务器上的主机文件中。 如果以后其他人遇到同样的问题,请尝试在 Host 文件中输入并检查。

            路径:C:\Windows\System32\drivers\etc
            文件名:主机

            【讨论】:

              【解决方案9】:

              我已经解决了这个问题

              连接尝试失败,因为连接方没有 一段时间后正确响应,或建立连接 失败,因为连接的主机没有响应

              解决方案

              我们需要在代码中配置代理设置。我使用 Web.config 文件的场景

              添加代理地址如下

              <system.net>
              <defaultProxy>
                <proxy  proxyaddress="http://XXXXX:XXXX" bypassonlocal="True"/>
              </defaultProxy>
              </system.net>
              

              还使用下面的代码 NetworkCredential 添加了代理凭据 - 我在这里使用了我的本地凭据。

               HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(url);
               webReq.Credentials = new NetworkCredential("XXXX", "XXXXX");
               webReq.Proxy.Credentials = new NetworkCredential("XXXX", "XXXX");
              

              它对我有用!

              【讨论】:

              • 这是最好的答案,非常感谢亲爱的
              【解决方案10】:
              1. 第一种可能性:相关 Web.config 文件中的加密字符串应与连接字符串中输入的相同(如上所示) 此外,当您在“注册表编辑器”或regedit.exe(如运行时所写)中更改任何内容时,在进行任何更改后,请关闭注册表编辑器并通过在运行时键入IISRESET 来重置您的 Internet 信息服务。然后登录到您的环境。

              2. 在运行时键入 Services.msc 并检查:

                1. ASP.NET 状态服务的状态已启动。如果没有,则右键单击它,通过属性,将其启动类型更改为自动。

                2. 该特定银行的 Iris ReportManager 服务是否已启动。如果它正在运行,它将在列表中显示“IRIS REPORT MANAGER SERVICE”作为启动。如果没有,请点击IRIS.REPORTMANAGER.EXE

                3. 运行它

                然后再次重置 IIS

              【讨论】:

                【解决方案11】:

                我知道这是一篇旧帖子,但我遇到了完全相同的问题,我设法通过关闭导致问题的 MALWAREBYTES 程序来使用它。

                【讨论】:

                  【解决方案12】:

                  这可能是服务器中的代理设置问题。您可以尝试禁用代理设置,
                  &lt;defaultProxy enabled="false" /&gt;

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-06-13
                    • 2016-08-30
                    • 2020-06-19
                    • 2014-01-07
                    • 1970-01-01
                    • 2011-10-29
                    相关资源
                    最近更新 更多