1

我正在开发一个 windows phone 8 应用程序,在我的应用程序中我正在调用服务并将一些数据下载到我的应用程序中。

我在 windows phone 8 模拟器中测试我的应用程序,很多时候它会抛出这个错误:

“远程服务器返回错误:未找到。”

这就是我创建和使用 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;
        }

我真的不知道是什么问题

请注意 :-

我试图在我的模拟器浏览器中打开网站(我的应用程序试图访问的服务 URL),它打开正确,我没有遇到任何问题。

1)这是我的代码的问题,如果是这样,我请求你纠正我?

2)这是任何模拟器问题或任何连接问题?

3)这是在模拟器中打开的任何认证问题吗?

即使对如何解决问题进行了长时间的研究,我也无法解决它。

请帮帮我。

提前致谢。

4

2 回答 2

0

当 web 服务请求花费超过 60 秒时,我遇到了这个问题。我读过报告说模拟器不会抛出这个错误,而只会抛出一个实际的设备。然而,根据我的经验,我在模拟器和设备上都发生过这种情况。这是一个无法更改的默认超时设置,即使您在配置中更改它也是如此。自 WP7 以来,此问题一直存在。

我只发现这个问题在其他地方被问过/写过一次。似乎没有多少人接受过这个。

AFAIK,微软知道这一点,但不打算修复它。(事实证明它自 WP7 以来就已经存在,并且没有为 WP8 修复)。我的猜测是,他们认为网络通话在任何情况下都不应超过 60 秒。

于 2013-04-03T10:03:51.710 回答
0

我刚刚解决了它向 https 请求添加空凭据,就像这样

    httpwebrequest.Credentials = new NetworkCredential("", "");

在这里他解释了为什么

http://blog.toetapz.com/2010/11/15/windows-phone-7-and-making-https-rest-api-calls-with-basic-authentication/

于 2014-09-10T19:35:51.527 回答