【问题标题】:C# - Getting response from WebResponseC# - 从 WebResponse 获取响应
【发布时间】:2016-06-19 13:01:22
【问题描述】:

我正在尝试下载放置在互联网上的 RSS 提要的 XML 源代码,但是当我的进程到达 WebResponse 语句(下面的第二行)时,进程停止并且接下来没有任何事情发生。没有错误,没有例外或类似的东西。我等了几十分钟,仍然没有任何反应。

WebRequest request = WebRequest.Create(source.Url);
WebResponse response = await request.GetResponseAsync(); // at this line it stops
Stream receiveStream = response.GetResponseStream();
StreamReader readStream = new StreamReader(receiveStream);

string xml = readStream.ReadToEnd().Trim();

readStream.Dispose();
response.Dispose();

知道是什么原因造成的吗?

编辑:

public static async Task<string> GetContent(string uri)
{
    WebRequest request = WebRequest.Create(url);

    using (WebResponse response = await request.GetResponseAsync().ConfigureAwait(false))
    {
        Stream receiveStream = response.GetResponseStream();
        StreamReader readStream = new StreamReader(receiveStream);

        return readStream.ReadToEnd().Trim();
    }
}

public async Task<ObservableCollection<Source>> GetArticlesFromSource()
{
    sourceDefinitions = await GetSourceDefinitions();

    string imageFolderName = "ArticleImages";
    string imageFolderPath = localFolder.Path + "\\" + imageFolderName;
    StorageFolder imageFolder = await localFolder.CreateFolderAsync(imageFolderName, CreationCollisionOption.ReplaceExisting);

    foreach (var source in sourceDefinitions)
    {
        if (source.Selected == "true")
        {
            ObservableCollection<Article> articlesStep1 = new ObservableCollection<Article>();
            /*WebRequest request = WebRequest.Create(source.Url);
            WebResponse response = await request.GetResponseAsync();
            Stream receiveStream = response.GetResponseStream();
            StreamReader readStream = new StreamReader(receiveStream);*/

            string xml = await GetContent("http://www.honzachalupa.cz/").ConfigureAwait(false);

            Debug.WriteLine(xml);
            ...

【问题讨论】:

  • 与您的代码相关,使用:WebResponse response = request.GetResponse()。它应该工作。最好的问候,

标签: c# html xml windows-10


【解决方案1】:

您的应用程序几乎可以肯定地在调用堆栈更上层的返回任务上调用 WaitResult,而我在博客上详细解释了这个 will cause a deadlock

要修复它,找到上游的Wait/Result 调用并将其更改为await。换句话说,使用“一路异步”。

【讨论】:

  • 我按照你在博客上写的那样做了,但仍然停留在var jsonString = await client.GetStringAsync(uri).ConfigureAwait(false); 行。不会继续return
  • @JanChalupa:您是否将所有WaitResult 实例更改为await?如果是这样,请发布完整的最小复制。
  • 我不太清楚,WaitResult 是什么意思。我编辑了我的原始帖子,其中包含更复杂的代码部分,并根据您的博客进行了更改。
  • @JanChalupa:请编辑您的代码,直到它是 minimal, complete, verifiable example,然后将其编辑为您的答案。这样我们就可以重现它并找出问题所在,而不仅仅是猜测。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-02
  • 1970-01-01
  • 2022-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多