C# 使用Windows Phone 8.1的HttpClient
可能听起来像个傻瓜,但这个问题并没有从我的脑海中消失。我正面临有关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字节 下面是与服务器通信的代码片段 请求实用程序代码段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
有什么想法吗?如果您有任何想法/建议,我们将不胜感激 我更喜欢使用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
{
}