Как установить useUnsafeHeaderParsing для .NET Compact Framework - PullRequest
3 голосов
/ 27 января 2011

В моем приложении Windows CE 6.0 я обмениваюсь данными с проприетарным устройством веб-сервера, которое возвращает неверную информацию заголовка (точнее, возвращает НЕТ информацию заголовка).

Я считаю, что отсутствие информации заголовкапричина, по которой мои методы HttpWebRequest не работают должным образом.

Я напоминаю, что «обычная» платформа .NET позволяет нам программно настраивать сборку System.Net.Configuration для разрешения недопустимых заголовков (useUnsafeHeaderParsing).

К сожалению, для меня сборка System.Net.Configuration не включена в Compact Framework.

Существует ли в CF аналогичная конфигурация, которая позволяет нам программно разрешать недопустимые заголовки

1 Ответ

7 голосов
/ 02 февраля 2011

Мне не удалось найти обходной путь для настройки UseUnsafeHeaderParsing. Я решил удалить реализацию класса HttpWebRequest и использовать вместо него TcpClient. Использование класса TcpClient будет игнорировать любые проблемы, которые могут существовать с заголовками HTTP - TcpClient даже не думает об этом.

В любом случае, используя TcpClient, я могу получать данные (включая заголовки HTTP) с проприетарного веб-сервера, о котором я упоминал в своем первоначальном посте.

Для справки, вот пример того, как получить данные с веб-сервера через TcpClient:

Приведенный ниже код по сути отправляет пакет заголовка HTTP на стороне клиента на веб-сервер.

static string GetUrl(string hostAddress, int hostPort, string pathAndQueryString)
{
string response = string.Empty;

//Get the stream that will be used to send/receive data
TcpClient socket = new TcpClient();
socket.Connect(hostAddress, hostPort);
NetworkStream ns = socket.GetStream();    

//Write the HTTP Header info to the stream
StreamWriter sw = new StreamWriter(ns);
sw.WriteLine(string.Format("GET /{0} HTTP/1.1", pathAndQueryString));
sw.Flush();

//Save the data that lives in the stream (Ha! sounds like an activist!)
string packet = string.Empty;
StreamReader sr = new StreamReader(ns);
do
{
packet = sr.ReadLine();
response += packet;
}
while (packet != null);

socket.Close();

return (response);
}
...