2010-05-12 2 views
0

У меня есть задача расписания, которая создает веб-запрос. Все это прекрасно работает. Однако внезапно я получаю следующий журнал ошибок.Получение ошибки 417 при использовании webrequest


12/05/2010 20:21:17 Отказ чтения XML- System.Net.WebException: Удаленный сервер возвратил ошибку: (417) не соответствует ожидаемому. в System.Net.HttpWebRequest.GetResponse() в DelegateImport.Update.UpdateLiveSite (String, String delegateId badgeId) в DelegateImport.Rss.RssReader()

Вот код делает веб-запрос

    WebRequest request = WebRequest.Create (uri); 
        request.Method = "POST";       
        byte[] byteArray = Encoding.UTF8.GetBytes (postData); 
        request.ContentType = "application/x-www-form-urlencoded"; 
        request.ContentLength = byteArray.Length; 
        request.Timeout = 30000000; 
        Stream dataStream = request.GetRequestStream(); 
        dataStream.Write (byteArray, 0, byteArray.Length); 
        dataStream.Close(); 
        WebResponse response = request.GetResponse(); 
        Console.WriteLine (((HttpWebResponse)response).StatusDescription); 
        dataStream = response.GetResponseStream(); 
        StreamReader reader = new StreamReader (dataStream); 
        string responseFromServer = reader.ReadToEnd(); 
        Console.WriteLine (responseFromServer); 
        reader.Close(); 
        dataStream.Close(); 
        response.Close(); 

ответ

0

По умолчанию .NET будет отмечать исходящие POST-запросы заголовком Expect: 100-Continue. Если сервер не поддерживает это, он завершится с ошибкой 417.

Чтобы получить .NET, чтобы не сделать это, выполните следующие действия перед созданием WebRequest объекта:

+0

я пытался, что, как это так, но не повезло - System.Net.ServicePointManager.Expect100Continue = ложный; Запрос WebRequest = WebRequest.Create (uri); – frosty

+1

Любая вероятность, что раньше в вашем коде говорилось с тем же URL до установки этого свойства? ServicePointManager повторно использует ServicePoints, поэтому перед выполнением любых запросов необходимо сначала установить свойство (например, при запуске приложения). –

+0

спасибо, eric, я уверен, что вы правы. Нужно быстро исправить, поэтому просто использовать «получить» не идеально, но видел меня через :) – frosty

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