我正在尝试从异步WebException捕获HttpWebRequest以从HttpWebRequest读取soap:fault。但它抛出了AggregateException。有什么方法可以捕获异步WebException吗?
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;
}
}发布于 2014-03-01 22:36:15
改变这个
var response = task.Result;到这个
var response = await task;await返回任务的结果或打开AggregateException (如果有的话)。
另外,.Result会阻塞当前线程,直到结果可用为止,这可能不是您想要的,否则您只需要使用阻塞GetResponse,而不是异步BeginGetResponse和EndGetResponse。
而且,你甚至不需要这两种方法。还有一个更好的-- GetResponseAsync
用这个:
var response = await req.GetResponseAsync();而不是这样:
Task<WebResponse> task = Task.Factory.FromAsync(
req.BeginGetResponse,
asyncResult => req.EndGetResponse(asyncResult),
(object)null);
var response = task.Result;https://stackoverflow.com/questions/22121279
复制相似问题