2011-01-27 3 views
3

В моем приложении Windows CE 6.0 я общаюсь с проприетарным устройством веб-сервера, которое возвращает плохую информацию заголовка (точнее, возвращает информацию заголовка NO).Как установить useUnsafeHeaderParsing для .NET Compact Framework

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

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

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

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

ответ

7

Мне не удалось найти обход для настройки 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); 
} 
+1

+1 для возврата и ответа на вопрос. – ctacke

+0

Спасибо, что спасли мне много времени! –

Смежные вопросы