может звучать как noob, но эта проблема действительно не выходит из моего ума. Я столкнулся с странной проблемой в отношении Windows Phone 8.1. Я разработал приложение для Windows Phone 8, которое связывается с сервером шлюза и обрабатывает запрошенные данные. Мы использовали HttpClient для отправки/получения данных на сервер шлюза. Однако по некоторым причинам я обновил ОС Windows Phone 8 до Windows Phone 8.1, но теперь он не обрабатывает запрос, когда я общаюсь с сервером шлюза.HttpClient с Windows Phone 8.1
Однако он отлично работает на эмуляторе Windows 8.1. Но не работает, когда вы развертываете приложение на самом устройстве Windows Phone 8.1 (ранее обновлялось с Windows Phone 8.0 os).
Кроме того,
var response = await RequestUtility.SendHttpRequest(myUri, httpMethod, stream, "text/xml", null, null, 0);
Ответ всегда содержит 0 байт всякий раз, когда мы запускаем это приложение на Windows Phone 8.1.
Вот фрагмент кода, которые взаимодействуют с сервером
public async Task<bool> ValidateUserRequest(User user)
{
var result = false;
var myUri = new Uri(GatewayUrl);
var content = RequestUtility.ValidateRequestBuilder(user);
try
{
var httpMethod = new HttpMethod("POST");
MemoryStream stream = new MemoryStream((new UTF8Encoding()).GetBytes(content.ToString(CultureInfo.InvariantCulture)));
var response = await RequestUtility.SendHttpRequest(myUri, httpMethod, stream, "text/xml", null, null, 0);
string ecodedString = Encoding.UTF8.GetString(response, 0, response.Length);
var serializer = new XmlSerializer(typeof(ResponseType));
ResponseType responseObject;
using (var reader = new StringReader(ecodedString))
{
responseObject = serializer.Deserialize(reader) as ResponseType;
}
if (responseObject != null) result = responseObject.Approved;
}
catch
{
result = false;
}
return result;
}
Запрос Utility код сниппета
public static async Task<byte[]> SendHttpRequest(Uri uri, HttpMethod method, Stream requestContent = null, string contentType = null, HttpClientHandler clientHandler = null, Dictionary<string, string> headers = null, int timeoutInSeconds = 0)
{
var req = clientHandler == null ? new HttpClient() : new HttpClient(clientHandler);
var message = new HttpRequestMessage(method, uri);
byte[] response;
if (requestContent != null && (method == HttpMethod.Post || method == HttpMethod.Put || method == HttpMethod.Delete))
{
message.Content = new StreamContent(requestContent); //set the body for the request
if (!string.IsNullOrEmpty(contentType))
{
message.Content.Headers.Add("Content-Type", contentType); // if the request has a body set the MIME type
}
}
// append additional headers to the request
if (headers != null)
{
foreach (var header in headers)
{
if (message.Headers.Contains(header.Key))
{
message.Headers.Remove(header.Key);
}
message.Headers.Add(header.Key, header.Value);
}
}
// Send the request and read the response as an array of bytes
if (timeoutInSeconds > 0)
{
req.Timeout = new TimeSpan(0, 0, timeoutInSeconds);
}
using (var res = await req.SendAsync(message))
{
response = await res.Content.ReadAsByteArrayAsync();
}
return response;
}
Любая идея? Ваши идеи/предложения будут оценены.
Если он работает в эмуляторе, но не в устройстве, я бы посмотрел, что может быть другим. Правильно ли было обновление телефона? Он испытывает какие-либо другие проблемы с подключением? Вы пытались создать новый проект и протестировать HttpRequest из голых костей? – earthling
У меня такая же проблема, мой код отлично работает на Windows 8.1, но не на Windows Phone 8.1 (пустое содержимое ответа)> Вы решили эту проблему? – Geotinc