永远不会达到与WebRequest绑定的AsyncCallback

时间:2012-06-08 08:37:59

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

我有一个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>

如果从浏览器调用,则网址响应相当快,但在此代码中myLabel从未显示Done.,它会保留在Fetching...文本上,就像回调永远不会被触发一样。

我错过了一些明显的东西吗?

更新

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

1 个答案:

答案 0 :(得分:1)

在回复中找到401 Unauthorized状态代码后,我设法在SO上找到了其他答案,这让我解决了我的问题(事实证明)添加了这个简单的问题:

request.UseDefaultCredentials = true;