【问题标题】:webClient.UploadValuesAsync not sending requestwebClient.UploadValuesAsync 不发送请求
【发布时间】:2014-07-24 20:06:13
【问题描述】:

我正在开发一个 MVC 5 Web 应用程序。

我正在 Quartz.Net 作业调度程序上运行作业,试图在我的 Web 应用程序上发布作业进度以显示进度条。

作业部分(调度器在同一台机器上运行):

webClient = new WebClient
{
    CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore)
};

NameValueCollection values = new NameValueCollection();
values["JobId"] = this.jobId.ToString();
values["Progression"] = progression.Progression.ToString();
values["Status"] = progression.Status;
values["Description"] = progression.Description;

if (!webClient.IsBusy)
    webClient.UploadValuesAsync(new Uri("http://localhost/Report/SetProgression"), "POST", values);

此代码执行没有错误,但由于某种原因,从未调用来自 ReportControllerSetProgression 操作。

此外,网络流量监控 (Fiddler) 永远不会显示此请求,就像它从未由 Web 客户端发送一样。

这种行为可能来自哪里?我错过了什么明显的东西吗?

【问题讨论】:

  • 如果webClient.IsBusy为真,你会怎么做?
  • @usr 在这种情况下它什么也不做。

标签: c# asp.net asp.net-mvc asp.net-mvc-5 webclient


【解决方案1】:

我发现:

通过将webClient.UploadValuesAsync 更改为其同步对应webClient.UploadValues,我的网络应用程序出现内部服务器错误。

这意味着请求被正确发送。

这样做(感谢this answer):

catch (WebException ex)
{
    using (var reader = new StreamReader(ex.Response.GetResponseStream()))
    {
        string responseText = reader.ReadToEnd();
    }
}

我能够找到错误并纠正它。

剩下的谜团是为什么我看不到这个请求在 Fiddler 中发送。现在没关系,但出于好奇,我愿意接受有启发性的建议。

【讨论】:

  • 网站是否在 IIS 中运行? IIS 在不同的用户下运行网站。 Fiddler 仅自动代理当前用户。
  • @usr 是的,它在 IIS 中运行。我想那是有道理的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-18
  • 1970-01-01
  • 2018-12-27
  • 2017-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多