【问题标题】:AsyncCallback tied to a WebRequest is never reached永远不会达到与 WebRequest 相关的 AsyncCallback
【发布时间】:2012-06-08 08:37:58
【问题描述】:

我有一个 ASPX 页面,它应该异步检索一些内容(一些纯文本数据),并在操作之前/期间/之后写一些东西。

目前,我可以到达“期间”步骤,但之后页面内容不再更改。

大问题是我无法执行任何类型的调试由于基础设施(错误)配置并且不允许运行远程调试工具,我不得不依赖发布看看会发生什么……

后面的代码如下(这是一个 .NET 3.5(更改目标框架不是一个选项)项目,在 VS2008 下创建,后来升级到 VS2010)

void Page_Load()
{
    myLabel = "Preparing to fetch content ...";
    FetchContent();
}

void FetchContent()
{
    try {
        // "http://myUrl" returns text with header 'Content-disposition: inline;'
        // If called directly, Text can be seen in the browser alright.
        WebRequest request = WebRequest.Create("http://myUrl");
        myLabel = "Fetching ...";
        request.BeginGetResponse(new AsyncCallback((result)=>
        {
            //EXCEPTION HERE: 401 Unauthorized ??? url works via browser!
            WebResponse resp = request.EndGetResponse(result);

            StreamReader stream = new StreamReader(resp.GetResponseStream());
            myLabel = "Done";
        }        
    } catch {myLabel = "Request KO"; }
}

在 ASPX 代码中,myLabel 被简单地显示:

<body>
    <pre><%=myLabel %></pre>
</body>

如果从浏览器调用,该 url 响应相当快,但在此代码中 myLabel 从未显示 Done.,它停留在 Fetching... 文本上,就像从未触发回调一样。

我在这里遗漏了什么明显的东西吗?

更新

仔细检查发现EndGetResponse 返回401 Unauthorized 状态码。如果我通过浏览器调用完全相同的 url,它可以完美地工作!现在一些更集中的搜索让我找到了解决方案。

【问题讨论】:

    标签: c# asp.net asynchronous .net-3.5


    【解决方案1】:

    在响应中找到 401 Unauthorized 状态码后,我设法在 SO 上找到了其他答案,这让我解决了我的(事实证明)微不足道的问题,添加了这个:

    request.UseDefaultCredentials = true;
    

    【讨论】:

      猜你喜欢
      • 2020-04-12
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多