我的Windows Phone应用程序每次都得到空响应(404未找到),第一次工作很棒;如果没有SSL,总是工作正常

StackOverflow https://stackoverflow.com//questions/24038530

  •  21-12-2019
  •  | 
  •  

我正在构建我的第一个windowsPhone8.1应用程序,我的应用程序的作用是创建与服务器的连接以从中获取信息,所以我正在编写代码,通过向服务器发送json-rpc请但是当我在没有https(仅http)的情况下调用服务时,无论我调用多少次,它都可以正常工作!

   public async Task<string> GetDataFromServer(string urlToCall, string JSONData,string RR)
        {
            string UserName = “XXXXXXX”
            string Password = "XXX";

            using ( var handler = new HttpClientHandler())
            {
                handler.Credentials = new NetworkCredential(UserName, Password);
                HttpClient client = new HttpClient(handler);

                HttpResponseMessage response = null;

            try
            {


                response = await client.PostAsync(urlToCall, new StringContent(JSONData.ToString(), Encoding.UTF8, " application/json"));
               string res = response.Content.ReadAsStringAsync().Result;




                Windows.UI.Popups.MessageDialog g = new Windows.UI.Popups.MessageDialog(res);
                await g.ShowAsync();
                return res;

            }
            catch (Exception ex)
            {


                Windows.UI.Popups.MessageDialog g = new Windows.UI.Popups.MessageDialog("Error is : " + ex.Message);
               g.ShowAsync();
               return "Error";
            }
            finally
            {
                response.Dispose();
                client.CancelPendingRequests();
                client.Dispose();
                handler.Dispose();
            }
            }

        }

再次,当第一次调用服务的URL(以https开始)时,我得到了带有搜索数据的响应,但第二次我收到了一个空的响应,404错误(找不到页面)!!任何帮助,请

有帮助吗?

解决方案

请尝试使用此解决方案。

        public async Task<string> SendJSONData3(string urlToCall, string JSONData)
    {
        string UserName = "XXXXXXXXX";
        string Password = "XXXXXXXXX";
        var httpWebRequest = (HttpWebRequest)WebRequest.Create(urlToCall);
        httpWebRequest.Credentials = new NetworkCredential(UserName, Password);
        httpWebRequest.ContentType = "text/json";
        httpWebRequest.Method = "POST";
        using (var streamWriter = new StreamWriter(await httpWebRequest.GetRequestStreamAsync()))
        {
            string json = JSONData;
            streamWriter.Write(json);
            streamWriter.Flush();
        }
        var httpResponse = (HttpWebResponse)await httpWebRequest.GetResponseAsync();
        using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
        {
            var result = streamReader.ReadToEnd();
            return result;
        }

    }
.

其他提示

几个想法:

  • 不要使用 .Result 财产。只需使用 await 而是避免死锁。
  • 删除媒体类型参数前面的额外空间 " application/json"
  • 在web服务器上启用日志记录,并查看第二个请求是否到达服务器。
  • 获取网络跟踪,例如 威雷沙克提琴手.
  • 试试打 WebRequest.RegisterPrefix("https://", WebRequestCreator.ClientHttp); 在你的初始化代码中,如本文所述 回答.
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top