Наше программное обеспечение c # .net подключается к онлайн-приложению для работы с аккаунтами и магазинами. Это делается с использованием HttpWebRequest
и HttpWebResponse
.
Пример этого взаимодействия, и одна область, из которой пришло исключение в заголовке:
var request = HttpWebRequest.Create(onlineApp + string.Format("isvalid.ashx?username={0}&password={1}", HttpUtility.UrlEncode(username), HttpUtility.UrlEncode(password))) as HttpWebRequest;
request.Method = "GET";
using (var response = request.GetResponse() as HttpWebResponse)
using (var ms = new MemoryStream())
{
var responseStream = response.GetResponseStream();
byte[] buffer = new byte[4096];
int read;
do
{
read = responseStream.Read(buffer, 0, buffer.Length);
ms.Write(buffer, 0, read);
} while (read > 0);
ms.Position = 0;
return Convert.ToBoolean(Encoding.ASCII.GetString(ms.ToArray()));
}
Онлайн-приложение ответит «истина» или «ложь». Во всех наших тестах он получает одно из этих значений, но для пары клиентов (из сотен) мы получаем это исключение System.FormatException: String was not recognized as a valid Boolean
, которое звучит так, будто ответ искажается чем-то. Если мы попросим их перейти в онлайн-приложение в своем веб-браузере, они увидят правильный ответ. Клиенты, как правило, находятся в школьных сетях, что может быть довольно ограничительным и часто под прокси-серверами, но большинство справляется хорошо, когда они вводят данные прокси или добавляют исключение брандмауэра. Есть ли что-то, что может испортить ответ от сервера, или что-то не так с нашим кодом?