2009-07-27 3 views
0

Я не могу показаться, что это видно. Независимо от того, что я делаю, я все время получаю сообщение об ошибке «417 Ожидание». Везде, где я смотрел, говорит, что мне нужно избавиться от заголовка Expect для HttpWebRequest. Установка статического свойства ServicePointManager.Expect100Continue = false или свойство экземпляра в веб-запросе request.ServicePoint.Expect100Continue = false никогда не избавляется от заголовка. Мне нужно вручную установить его в null, чтобы удалить его.Ожидание Сбой при попытке обновить статус твиттера

Независимо от того, что, я ВСЕГДА получаю ошибку 417. Что мне не хватает?

private static readonly MessageReceivingEndpoint UpdateStatusEndpoint 
     = new MessageReceivingEndpoint("http://twitter.com/statuses/update.xml", HttpDeliveryMethods.PostRequest); 

public static XDocument UpdateStatus(ConsumerBase twitter, string accessToken, string message) 
{ 
    var data = new Dictionary<string, string>(); 
    data.Add("status", message); 
    ServicePointManager.Expect100Continue = false; //Doesn't work 
    HttpWebRequest request = twitter.PrepareAuthorizedRequest(UpdateStatusEndpoint, accessToken, data); 

    request.ServicePoint.Expect100Continue = false; //setting here doesn't work either 

    //request.Expect is still set at this point unless I explicitly set it to null. 

    request.Expect = null; 
    var response = twitter.Channel.WebRequestHandler.GetResponse(request); //Throws exception 
    return XDocument.Load(XmlReader.Create(response.GetResponseReader())); 
} 
+0

Как выглядят заголовки? 417 - это конкретная реакция на заголовок Expect: поэтому, если вы уверены, что не отправляете ни одного из них, это было бы странно. – balpha

+0

Прямо перед вызовом GetResponse() свойство «Ожидание» равно null, а коллекция заголовков не содержит заголовок «Ожидание». Мне нужно будет проверить со скрипачом, чтобы увидеть, как-то все еще туда попадает. Я до сих пор не могу объяснить, почему не работает вызов «Expect100Continue = false» – Micah

+0

DotNetOpenAuth имеет встроенную встроенную обработку ошибок, так что вашему приложению даже не нужно обрабатывать этот случай или установить значение Expect100Continue в false. Можете ли вы включить ведение журнала, чтобы мы могли убедиться, что это происходит? http://dotnetopenauth.net:8000/wiki/CodeSnippets/Logging –

ответ

3

DotNetOpenAuth не устанавливает и не поддерживает Except100Continue непосредственно. Было бы неплохо, если в классе Channel есть свойство.

Добавьте это перед вашим вызовом 'PrepareAuthorizedRequest':

((HttpWebRequest)WebRequest.Create 
(UpdateStatusEndpoint.Location)).ServicePoint.Expect100Continue = false; 

Except100Continue устанавливается в зависимости от вызываемого URL. Поэтому вы можете установить его до создания соединения. Вы даже можете установить его глобально в файле конфигурации.

<system.net> 
    <settings> 
     <servicePointManager expect100Continue="false" /> 
    </settings> 
    </system.net> 
+0

DotNetOpenAuth использует только класс HttpWebRequest, поэтому Эрик, что DotNetOpenAuth не поддерживает настройку Expect100Continue? –

+2

Возможно, более чистый способ установить свойство ServicePoint.Expect100Continue в Twitter будет «ServicePointManager.FindServicePoint (UpdateStatusEndpoint.Location) .Expect100Continue = false' –

+0

Andrew, я думал об этом свойстве: webRequest.ServicePoint.Expect100Continue = false; Но после некоторого переосмысления, я полагаю, это не имеет значения. Оба они, возможно, свяжутся с ServicePointManager. – EricSch

0

LinqToTwitter - это клиентская библиотека Twitter, в которой используется DotNetOpenAuth. Я расскажу о добавлении примера публикации сообщений в базовую библиотеку DotNetOpenAuth для будущей версии.

1

Установите Expectation не "ожидать: ничего" ..этот мой код:

var data = new Dictionary();

data.Add("status", status);

HttpWebRequest request = twitter.PrepareAuthorizedRequest(UpdateStatusEndpoint, accessToken, data);

request.Expect = "expect:nothing";

var response = twitter.Channel.WebRequestHandler.GetResponse(request); exception return XDocument.Load(XmlReader.Create(response.GetResponseReader()));

он работал для меня ...

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

  • Нет связанных вопросов^_^