Не совсем связано с ответом на вопрос, но блок ответов, кажется, единственное место, которое соответствует рекомендации, которую я собираюсь дать ... Вы должны иметь соответствующую защиту ресурсов для своих потоков, используя блоки using
как например:
Оригинальный код:
Stream postStream = req.EndGetRequestStream(aresult);
string obj = "{ 'username': 'test_2@aragast.com', 'password': 'a123456' }";
JObject json = JObject.Parse(obj);
string s = JsonConvert.SerializeObject(json);
byte[] postdata = System.Text.Encoding.Unicode.GetBytes(s);
postStream.Write(postdata, 0, postdata.Length);
postStream.Close();
Новый код ( также убедитесь, что ваша кодировка верна для запроса: ваш веб-сервис действительно ожидает UTF-16? Чаще всего веб-серверы используют UTF-8 (Encoding.UTF8) ):
using (Stream postStream = req.EndGetRequestStream(aresult))
{
string obj = "{ 'username': 'test_2@aragast.com', 'password': 'a123456' }";
JObject json = JObject.Parse(obj);
string s = JsonConvert.SerializeObject(json);
byte[] postdata = System.Text.Encoding.Unicode.GetBytes(s);
postStream.Write(postdata, 0, postdata.Length);
}
Оригинальный код:
HttpWebResponse resp = (HttpWebResponse)req.EndGetResponse(aresult);
StreamReader reader = new StreamReader(resp.GetResponseStream());
string response = reader.ReadToEnd();
Debug.WriteLine(response);
JObject responseJson = JObject.Parse(response);
ansJson = responseJson;
Debug.WriteLine("ansJson from responseCallback {0}", ansJson);
reader.Close();
resp.Close();
Новый код:
using (HttpWebResponse resp = (HttpWebResponse)req.EndGetResponse(aresult))
using (StreamReader reader = new StreamReader(resp.GetResponseStream()))
{
string response = reader.ReadToEnd();
Debug.WriteLine(response);
JObject responseJson = JObject.Parse(response);
ansJson = responseJson;
Debug.WriteLine("ansJson from responseCallback {0}", ansJson);
}
Я бы также рекомендовал окружать ваши операции req
и resp
блоками try..catch
, чтобы что-то могло обрабатывать исключительные условия - в противном случае это будет связано с обработчиком исключений AppDomain (также может быть перехвачен событием UnhandledException ).