【问题标题】:C# Calling a URL: TimeoutC# 调用 URL:超时
【发布时间】:2013-06-06 19:31:45
【问题描述】:

我正在尝试编写程序的一部分,通过调用向管理员发送电子邮件的 URL 来通知管理员客户端数据已更新/发送。我已经成功地做到了这一点,但仅在 Windows 7 和 2003 上。我需要它在 Windows server 2008 上运行。它还需要在调用 url 时向用户隐藏 Web 浏览器。如果我让资源管理器窗口打开,我已经成功发送电子邮件,但如果我尝试隐藏窗口,它总是失败。 我使用的代码如下:

HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url += strNewValue);
// execute the request
HttpWebResponse response = (HttpWebResponse)wr.GetResponse();

Stream resStream = response.GetResponseStream();
    response.Close();

/*   
    WebBrowser web = new WebBrowser();
        web.AllowNavigation = true;
        web.Visible = false;
        web.Navigate(url+strNewValue);
*/
/*
    ProcessStartInfo startweb = new ProcessStartInfo(url + strNewValue);
        startweb.RedirectStandardOutput = false;
        startweb.WindowStyle = ProcessWindowStyle.Hidden;
        startweb.UseShellExecute = true;
        startweb.CreateNoWindow = true;

        Process.Start(startweb);
*/

注释代码显示了我为使其工作所做的其他尝试。这段代码似乎都可以在 Windows 2007 和 Windows Server 2003 上成功运行,但我无法让它在必须的 Windows 2008 Server 上运行。

每次到达应用程序中的这部分代码时,程序都会开始不响应,最终恢复并说它已发送通知。但是,它会在应用程序中冻结,并且永远不会发送电子邮件。我已经检查了这个 URL,它在手动完成时发送电子邮件没有任何问题。如果这可能导致任何问题,我目前正在使用 .NET 4.0 客户端包。我得到的唯一错误是 httpwebresponse getresponse(); 的超时错误;

任何建议都会非常有帮助。提前谢谢你

【问题讨论】:

  • 在我看来,您的 Windows Server 2008 机器位于不允许连接的限制性防火墙后面。您无法通过代码对此进行任何操作,您需要让网络管理员允许连接。
  • 另外,似乎对 Server 2008 上的 ProcessStartInfo 类的支持有限。我会检查文档页面 here 看看这些限制是否也适用于此。
  • 可以在本机浏览器中加载网址吗?
  • 我检查了防火墙。防火墙已关闭。是的,我可以在机器上的浏览器中加载 URL。
  • 你能在机器上的浏览器中加载 URL + 任何查询字符串吗?

标签: c# url .net-4.0 httpwebrequest process.start


【解决方案1】:

您能否改为配置System.Net.Mail 命名空间中的对象(例如SmtpClient)并自己直接发送电子邮件?此解决方案在发送电子邮件时引入了一个看似不必要且复杂/容易失败的过程,而以编程方式完成这是一项相当微不足道的任务。

SmtpClient MSDN Documentation

【讨论】:

  • 不,我不能使用 SmtpClient,因为 API 调用并不总是针对电子邮件。我只是使用电子邮件进行测试以立即获得结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-14
  • 1970-01-01
相关资源
最近更新 更多