Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Windows Phone 8.1的HttpClient_C#_Windows Phone 8_Windows Phone 8.1_Windows Phone 8 Emulator - Fatal编程技术网

C# 使用Windows Phone 8.1的HttpClient

C# 使用Windows Phone 8.1的HttpClient,c#,windows-phone-8,windows-phone-8.1,windows-phone-8-emulator,C#,Windows Phone 8,Windows Phone 8.1,Windows Phone 8 Emulator,可能听起来像个傻瓜,但这个问题并没有从我的脑海中消失。我正面临有关Windows Phone 8.1的奇怪问题。我为WindowsPhone8开发了一个应用程序,它与网关服务器通信并处理请求的数据。我们使用HttpClient向网关服务器发送/接收数据。但是,由于某些原因,我将Windows Phone 8操作系统升级为Windows Phone 8.1,但现在,每当我与网关服务器通信时,它都不会处理请求 不过,它在Windows 8.1 Emulator上运行良好,但在以前从Windows P

可能听起来像个傻瓜,但这个问题并没有从我的脑海中消失。我正面临有关Windows Phone 8.1的奇怪问题。我为WindowsPhone8开发了一个应用程序,它与网关服务器通信并处理请求的数据。我们使用HttpClient向网关服务器发送/接收数据。但是,由于某些原因,我将Windows Phone 8操作系统升级为Windows Phone 8.1,但现在,每当我与网关服务器通信时,它都不会处理请求

不过,它在Windows 8.1 Emulator上运行良好,但在以前从Windows Phone 8.0操作系统升级的实际Windows Phone 8.1设备上部署应用程序时不起作用

而且 var response=await RequestUtility.SendHttpRequestmyUri,httpMethod,stream,text/xml,null,null,0;在Windows Phone 8.1上运行此应用程序时,响应始终包含0字节

下面是与服务器通信的代码片段

请求实用程序代码段


有什么想法吗?如果您有任何想法/建议,我们将不胜感激

我更喜欢使用httpwebrequest和httpwebresponse类来执行对服务器的简单请求,请使用以下命令:

    private async Task<string> DoRequest(string Type, string Device, string Version, string Os)
    {
        //Declarations of Variables
        string result = "";

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.ContinueTimeout = 4000;

        request.Credentials = CredentialCache.DefaultNetworkCredentials;

        //Add headers to request
        request.Headers["Type"] = Type;
        request.Headers["Device"] = Device;
        request.Headers["Version"] = Version;
        request.Headers["Os"] = Os;
        request.Headers["Cache-Control"] = "no-cache";
        request.Headers["Pragma"] = "no-cache";

        using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync())
        {
            if (response.StatusCode == HttpStatusCode.OK)
            {
                //To obtain response body
                using (Stream streamResponse = response.GetResponseStream())
                {
                    using (StreamReader streamRead = new StreamReader(streamResponse, Encoding.UTF8))
                    {
                        result = streamRead.ReadToEnd();
                    }
                }
            }
        }

        return result;
    }
    private void DoSincroFit()
    {
        HttpWebRequest request = HttpWebRequest.CreateHttp(url);

        //Add headers to request
        request.Headers["Type"] = "sincrofit";
        request.Headers["Device"] = "1";
        request.Headers["Version"] = "0.000";
        request.Headers["Os"] = "WindowsPhone";
        request.Headers["Cache-Control"] = "no-cache";
        request.Headers["Pragma"] = "no-cache";

        request.BeginGetResponse(new AsyncCallback(playResponseAsync), request);
    }

    public async void playResponseAsync(IAsyncResult asyncResult)
    {
        //Declaration of variables
        HttpWebRequest webRequest = (HttpWebRequest)asyncResult.AsyncState;

        try
        {
            string fileName = "sincrofit.rar";

            using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.EndGetResponse(asyncResult))
            {
                byte[] buffer = new byte[1024];

                var newZipFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);

                using (var writeStream = await newZipFile.OpenAsync(FileAccessMode.ReadWrite))
                {
                    using (var outputStream = writeStream.GetOutputStreamAt(0))
                    {
                        using (var dataWriter = new DataWriter(outputStream))
                        {
                            using (Stream input = webResponse.GetResponseStream())
                            {
                                var totalSize = 0;
                                for (int size = input.Read(buffer, 0, buffer.Length); size > 0; size = input.Read(buffer, 0, buffer.Length))
                                {
                                    dataWriter.WriteBytes(buffer);
                                    totalSize += size;    //get the progress of download
                                }
                                await dataWriter.StoreAsync();
                                await outputStream.FlushAsync();
                                dataWriter.DetachStream();
                            }
                        }
                    }
                }

            }
        }
        catch
        {

        }

你能用这个吗?祝你好运

如果它在模拟器中工作,但在设备中不工作,我会检查看看有什么可能不同。手机升级正常吗?它是否遇到任何其他连接问题?您是否尝试过创建一个新项目并测试一个简单的HttpRequest?我也有同样的问题,我的代码在Windows 8.1上运行得很好,但在Windows Phone 8.1空响应内容中不行>您解决了这个问题吗?
    private async Task<string> DoRequest(string Type, string Device, string Version, string Os)
    {
        //Declarations of Variables
        string result = "";

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.ContinueTimeout = 4000;

        request.Credentials = CredentialCache.DefaultNetworkCredentials;

        //Add headers to request
        request.Headers["Type"] = Type;
        request.Headers["Device"] = Device;
        request.Headers["Version"] = Version;
        request.Headers["Os"] = Os;
        request.Headers["Cache-Control"] = "no-cache";
        request.Headers["Pragma"] = "no-cache";

        using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync())
        {
            if (response.StatusCode == HttpStatusCode.OK)
            {
                //To obtain response body
                using (Stream streamResponse = response.GetResponseStream())
                {
                    using (StreamReader streamRead = new StreamReader(streamResponse, Encoding.UTF8))
                    {
                        result = streamRead.ReadToEnd();
                    }
                }
            }
        }

        return result;
    }
    private void DoSincroFit()
    {
        HttpWebRequest request = HttpWebRequest.CreateHttp(url);

        //Add headers to request
        request.Headers["Type"] = "sincrofit";
        request.Headers["Device"] = "1";
        request.Headers["Version"] = "0.000";
        request.Headers["Os"] = "WindowsPhone";
        request.Headers["Cache-Control"] = "no-cache";
        request.Headers["Pragma"] = "no-cache";

        request.BeginGetResponse(new AsyncCallback(playResponseAsync), request);
    }

    public async void playResponseAsync(IAsyncResult asyncResult)
    {
        //Declaration of variables
        HttpWebRequest webRequest = (HttpWebRequest)asyncResult.AsyncState;

        try
        {
            string fileName = "sincrofit.rar";

            using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.EndGetResponse(asyncResult))
            {
                byte[] buffer = new byte[1024];

                var newZipFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);

                using (var writeStream = await newZipFile.OpenAsync(FileAccessMode.ReadWrite))
                {
                    using (var outputStream = writeStream.GetOutputStreamAt(0))
                    {
                        using (var dataWriter = new DataWriter(outputStream))
                        {
                            using (Stream input = webResponse.GetResponseStream())
                            {
                                var totalSize = 0;
                                for (int size = input.Read(buffer, 0, buffer.Length); size > 0; size = input.Read(buffer, 0, buffer.Length))
                                {
                                    dataWriter.WriteBytes(buffer);
                                    totalSize += size;    //get the progress of download
                                }
                                await dataWriter.StoreAsync();
                                await outputStream.FlushAsync();
                                dataWriter.DetachStream();
                            }
                        }
                    }
                }

            }
        }
        catch
        {

        }