我正在开发一个Windows Phone 8应用程序,在我的应用程序中,我正在调用服务并将一些数据下载到我的应用程序中。
我在windows phone 8模拟器中测试我的应用程序,很多时候它会抛出这个错误:
“远程服务器返回错误:NotFound。”
这就是我创建和使用我的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);
}
var httpTask = httpRequest(httpwebrequest);
var completeTask = await Task.WhenAny(httpTask, TaskEx.Delay(300000));
if (completeTask == httpTask)
return await httpTask;
else
httpwebrequest.Abort();
throw new TimeoutException("Service Timed Out");
}
catch (TimeoutException Tex)
{
throw Tex;
}
catch (Exception ex)
{
throw ex;
}
}
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)是我的代码问题,如果是这样我请求你请纠正我?
2)这是任何模拟器问题还是任何连接问题?
3)这是在模拟器中打开的任何认证问题吗?
即使经过长时间研究如何解决问题,我也无法解决问题。
请帮帮我。
先谢谢。
答案 0 :(得分:0)
当webservice请求超过60秒时,我遇到过这个问题。我已经阅读过报告,模拟器不会抛出此错误,而只会抛出实际设备。然而,根据我的经验,我在模拟器和设备上都发生过这种情况。这是默认超时设置,即使您在配置中更改了该设置,也无法更改。自WP7以来,这个问题一直存在。
我只在其他地方发现过这个问题/博客。似乎并没有很多人选择这个。
AFAIK,微软都知道这一点,但不打算修复它。 (事实证明它自WP7以来一直存在,并且不适用于WP8)。我的猜测是他们认为网络电话在任何情况下都不应超过60秒。
答案 1 :(得分:0)
我刚刚解决了将空凭据添加到https请求的问题,比如
httpwebrequest.Credentials = new NetworkCredential("", "");
这里他解释了为什么