none
Win8应用中使用http请求 RRS feed

  • 问题

  • 做了一个win8应用,其中需要发一个http请求以获取一个json串。在我开发机上运行正常,但安装到平板上后,就报:Unable to connect to the remote server。网络保证是通的,因为用平板上的浏览器可以访问到相应的数据,这是什么原因呢?
    2014年10月17日 4:04

答案

  • 总算搞定了,我的服务端也是私有地址,需要增加一个能力:

    Private Networks (Client & Server): The sample has inbound and outbound network access on a home or work network (a local intranet). This allows the app to download various types of content from an HTTP server and upload content to an HTTP server located on a local intranet. The Private Networks (Client & Server) capability is represented by the Capability name = "privateNetworkClientServer" tag in the app manifest.

    • 已标记为答案 xjsylhl 2014年10月18日 15:09
    2014年10月18日 15:09

全部回复

  • hi 请把代码贴一下方便分析
    2014年10月17日 9:29
  • 建议做请求超时的处理!

    我在项目中使用的HttpClient实现的数据的请求

    参考地址 http://msdn.microsoft.com/en-us/library/windows/apps/windows.web.http.httpclient.aspx

    public static Task<string> HttpRequest(string url)
            {
                string result = string.Empty;
                return Task.Run(async () =>
                {
                    using (HttpClient httpclient = new HttpClient())
                    {
                        try
                        {
                            httpclient.Timeout = TimeSpan.FromSeconds(15);
                            using (HttpResponseMessage httpresponse = await httpclient.GetAsync(url))
                            {
                                var resultBytes = await httpresponse.Content.ReadAsByteArrayAsync();
                                result = Encoding.UTF8.GetString(resultBytes, 0, resultBytes.Length);
                                Debug.WriteLine("请求结果:" + result);
                            }
                        }
                        catch (HttpRequestException hrex)
                        {
                            // 网络异常
                            Debug.WriteLine("请求结果:" + hrex.Message);
                            // Common.CommonHelper.ShowTastPrompt("网络异常!");
                        }
                        catch (OperationCanceledException operationCanceledException)
                        {
                            Debug.WriteLine("请求结果:" + operationCanceledException.Message);
                            // 取消线程正在执行的操作时在线程中引发的异常。
                        }
                        catch (Exception ex)
                        {
                            Debug.WriteLine("请求结果:" + ex.Message);
                        }
                        finally
                        {
                            httpclient.Dispose();
                        }
                        return result;
                    }
    
                });
            }


    爱编程 爱生活

    2014年10月17日 11:59
  • 你好,

    你是以远程调试的方式部署到平板上还是发布到商店的方式部署到平板上,如果是远程调试的话应该不会有问题,如果是以release形式发布的话,很有可能是debug和release的不同造成的。

    --James


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2014年10月17日 14:21
    版主
  • 开始我是在vs上右键应用商店,创建应用程序包,然后拷到平板上,用powerShell安装的。后来在平板上也装了个vs,直接用源程序debug,还是报一样的错。

                    string url = "****";  // 帖子里不让有链接,就用****代替了
                    HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest;
                    req.Method = "GET";
                   
                    using (WebResponse response = await req.GetResponseAsync())
                    using (Stream responseStream = response.GetResponseStream())
                    using (StreamReader reader = new StreamReader(responseStream))
                    {
                        str = reader.ReadToEnd();
                    }

    这个url通过浏览器是可以访问的。把它改成百度也可以访问

    2014年10月18日 14:20
  • 总算搞定了,我的服务端也是私有地址,需要增加一个能力:

    Private Networks (Client & Server): The sample has inbound and outbound network access on a home or work network (a local intranet). This allows the app to download various types of content from an HTTP server and upload content to an HTTP server located on a local intranet. The Private Networks (Client & Server) capability is represented by the Capability name = "privateNetworkClientServer" tag in the app manifest.

    • 已标记为答案 xjsylhl 2014年10月18日 15:09
    2014年10月18日 15:09