我正在开发一个Windows Phone 8应用程序,在我的应用程序中,我正在调用服务并将一些数据下载到我的应用程序中。
我正在使用httpwebrequest请求,但我无法将超时设置为我的httpwebrequest对象。
这就是我创建和使用我的httpwebrequest的方式: -
public async Task<string> ServiceRequest(string serviceurl, string request, string methodname)
{
string response = "";
try
{
var httpwebrequest = WebRequest.Create(new Uri(serviceurl)) as HttpWebRequest;
httpwebrequest.Method = "POST";
httpwebrequest.Headers["SOAPAction"] = "http://tempuri.org/" + iTestservice + "/" + methodname + "";
httpwebrequest.ContentType = "text/xml";
byte[] data = Encoding.UTF8.GetBytes(request);
using (var requestStream = await Task<Stream>.Factory.FromAsync(httpwebrequest.BeginGetRequestStream, httpwebrequest.EndGetRequestStream, null))
{
await requestStream.WriteAsync(data, 0, data.Length);
}
response = await httpRequest(httpwebrequest);
}
catch (Exception ex)
{
return null;
}
return response;
}
public async Task<string> httpRequest(HttpWebRequest request)
{
string received;
using (var response = (HttpWebResponse)(await Task<WebResponse>.Factory.FromAsync(request.BeginGetResponse, request.EndGetResponse, null)))
{
using (var responseStream = response.GetResponseStream())
{
using (var sr = new StreamReader(responseStream))
{
received = await sr.ReadToEndAsync();
}
}
}
return received;
}
我的怀疑是: -
1)如何将超时属性设置为Httpwebrequest ??
2)我可以在windows phone 8 app中设置超时属性的不同方法是什么?
请告诉我。
先谢谢。
答案 0 :(得分:9)
您无法在Windows Phone上使用HttpWebRequest.Timeout
,因为该平台不存在此问题。
如果您愿意使用测试版库,则可以安装HttpClient
via NuGet并使用其 Timeout
属性。
否则,您最好使用TaskEx.Delay
,这是Microsoft.Bcl.Async的一部分。安装该库后,您将替换此行:
response = await httpRequest(httpwebrequest);
用这个:
var httpTask = httpRequest(httpwebrequest);
var completeTask = await TaskEx.WhenAny(httpTask, TaskEx.Delay(5000));
if (completeTask == httpTask)
return await httpTask;
else
return null; // timeout
答案 1 :(得分:0)
你可以使用HttpStatusCode.HttpStatusCode是一个枚举,可以用来获取HttpWebRequest中的错误类型。
catch(WebException ex)
{
HttpWebResponse response = (HttpWebResponse)ex.Response;
if(response.StatusCode==HttpStatusCode.GatewayTimeout)
{
}
}
GatewayTimeout表示中间代理服务器在等待来自其他代理或源服务器的响应时超时。有关详细信息,请参阅msdn 这个网站。希望它有所帮助