首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步HttpWebRequest捕获WebException

异步HttpWebRequest捕获WebException
EN

Stack Overflow用户
提问于 2014-03-01 22:33:00
回答 1查看 1.4K关注 0票数 0

我正在尝试从异步WebException捕获HttpWebRequest以从HttpWebRequest读取soap:fault。但它抛出了AggregateException。有什么方法可以捕获异步WebException吗?

代码语言:javascript
复制
public async Task<XDocument> GetXmlSoapResponseAsync(string soapRequestURL, string xmlData)
    {
      try
      {
        //create xml doc
        XmlDocument doc = new XmlDocument();

        //load xml document frtom xmlData
        doc.LoadXml(xmlData);
        //creta web request
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(soapRequestURL);
        req.ContentType = "text/xml";
        req.Accept = "text/xml";
        req.Method = "POST";

        //GetRequestStream from req
        Stream stm = req.GetRequestStream();
        doc.Save(stm);
        stm.Close();

        Task<WebResponse> task = Task.Factory.FromAsync(
        req.BeginGetResponse,
        asyncResult => req.EndGetResponse(asyncResult),
        (object)null);

        var response = task.Result;
        return await task.ContinueWith(t => ReadStreamFromResponse(response,stm, soapRequestURL,xmlData));
      }
      catch (WebException webException)
      {
        LogWebException(webException, soapRequestURL, xmlData);

        return null;
      }

    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-01 22:36:15

改变这个

代码语言:javascript
复制
var response = task.Result;

到这个

代码语言:javascript
复制
var response = await task;

await返回任务的结果或打开AggregateException (如果有的话)。

另外,.Result会阻塞当前线程,直到结果可用为止,这可能不是您想要的,否则您只需要使用阻塞GetResponse,而不是异步BeginGetResponseEndGetResponse

而且,你甚至不需要这两种方法。还有一个更好的-- GetResponseAsync

用这个:

代码语言:javascript
复制
var response = await req.GetResponseAsync();

而不是这样:

代码语言:javascript
复制
Task<WebResponse> task = Task.Factory.FromAsync(
req.BeginGetResponse,
asyncResult => req.EndGetResponse(asyncResult),
(object)null);

var response = task.Result;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22121279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档