首页新闻找找看学习计划

请问webClient类,异步的时候发生的异常是怎么回事

0
悬赏园豆:10 [已解决问题] 解决于 2015-05-15 15:32

异步调用一个ashx(httphandler)

1    var requestUrl = Request.Url.ToString();
2    requestUrl = requestUrl.Replace("protocol=SendAsync", protocol=Send");
3             if (!string.IsNullOrEmpty(requestUrl))
4             {
5                 WebClient client = new WebClient();
6                 client.DownloadStringAsync(new System.Uri(requestUrl));
7                 return "{\"success\':true,\"message\":\"请求已发送\"}";
8             }

 

client.DownloadStringAsync会抛出异常:

“System.InvalidOperationException”类型的异常在 System.Web.dll 中发生,但未在用户代码中进行处理

其他信息: 现在无法开始异步操作。异步操作只能在异步处理程序或模块中开始,或在页生存期中的特定事件过程中开始。如果此异常在执行 Page 时发生,请确保 Page 标记为 <%@ Page Async="true" %>。此异常也可能表明试图调用“异步无效”方法,在 ASP.NET 请求处理内一般不支持这种方法。相反,该异步方法应该返回一个任务,而调用方应该等待该任务。

请问:可能是什么问题?

众生皆苦的主页 众生皆苦 | 初学一级 | 园豆:138
提问于:2015-05-15 14:08
< >
分享
最佳答案
1

加上await:

await client.DownloadStringAsync(new System.Uri(requestUrl));

所在方法加上async

收获园豆:10
dudu | 高人七级 |园豆:38642 | 2015-05-15 14:30

await async 只支持Task的方法。不写Task就没法通过编译。

   public async Task<string> SendEmailAsync()
        {
            var requestUrl = Request.Url.ToString();
            requestUrl = requestUrl.Replace("protocol=SendAsync", "protocol=Send");
            if (!string.IsNullOrEmpty(requestUrl))
            {
                WebClient client = new WebClient();
                client.DownloadStringTaskAsync(new System.Uri(requestUrl));
               return "{\"success\':true,\"message\":\"请求已发送\"}";
            }
            return "{\"success\':false,\"message\":\"参数异常\"}";
        }

但是这样返回值是这样的  System.Threading.Tasks.Task`1[System.String]

而且请求也过不去

众生皆苦 | 园豆:138 (初学一级) | 2015-05-15 14:52

您有时间的话就再帮我看一下。谢谢。已经前进了一步

众生皆苦 | 园豆:138 (初学一级) | 2015-05-15 14:53

@众生皆苦: 调用这个方法的方法也要改成异步的,异步要从上到下全部异步。

dudu | 园豆:38642 (高人七级) | 2015-05-15 14:55

@dudu:感谢帮助。调用之前的代码还有好多呢。能不能有其他的解决办法?我看其他人的文章里 直接使用DownloadStringAsync也是可以的 并不需要TASK啊。能不能从这个方向帮忙看一下?十分感谢。

众生皆苦 | 园豆:138 (初学一级) | 2015-05-15 14:57

@众生皆苦: 如果是ASP.NET程序,必须要从上到下全部异步,我们当时就改了大量代码,详见:

走进异步世界:博客程序的异步化改造以及发布后的不理想情况

dudu | 园豆:38642 (高人七级) | 2015-05-15 15:05

@dudu: 哦 好的我去看看 改代码我倒是不怕 就是调用这个方法的时候使用的是反射 不知道怎么搞了。

再次感谢。谢谢。

众生皆苦 | 园豆:138 (初学一级) | 2015-05-15 15:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册