2009-07-27 5 views
0

Je n'arrive pas à comprendre cela. Peu importe ce que je fais, je reçois toujours une erreur "417 Expectation failed". Partout où j'ai regardé dit que je dois me débarrasser de l'en-tête Expect pour le HttpWebRequest. La définition de la propriété statique ServicePointManager.Expect100Continue = false ou la propriété d'instance sur la demande Web request.ServicePoint.Expect100Continue = false ne se débarrasse jamais de l'en-tête. Je dois manuellement le mettre à null pour l'enlever. Quoi qu'il en soit, je reçois toujours l'erreur 417. Qu'est-ce que je rate?Expectation Échec lors de la tentative de mise à jour de l'état de Twitter

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

À quoi ressemblent les en-têtes? 417 est une réaction spécifique à un en-tête Expect:, donc si vous êtes sûr que vous n'en envoyez aucun, ce serait vraiment bizarre. – balpha

+0

Juste avant d'appeler GetResponse(), la propriété "Expect" est null, et la collection headers ne contient pas l'en-tête "Expect". Je vais devoir vérifier avec un violoniste pour voir si ça continue à être mis là. Je ne peux toujours pas expliquer pourquoi ni l'appel à "Expect100Continue = false" ne fonctionne – Micah

+0

DotNetOpenAuth a 417 intégré de gestion des erreurs de sorte que votre application ne devrait même pas gérer ce cas ou définir Expect100Continue sur false. Pouvez-vous activer la journalisation afin que nous puissions voir si cela se produit? http://dotnetopenauth.net:8000/wiki/CodeSnippets/Logging –

Répondre

3

DotNetOpenAuth ne précise pas ou appuyer Except100Continue directement. Serait bien s'il y a une propriété dans la classe Channel.

Ajouter cette avant votre appel à 'PrepareAuthorizedRequest':

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

Except100Continue est définie en fonction de l'URL appelée. Vous pouvez donc le définir avant la création de la connexion. Vous pouvez même le définir globalement dans le fichier de configuration.

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

DotNetOpenAuth utilise simplement la classe HttpWebRequest, donc Eric, qu'est-ce que DotNetOpenAuth ne supporte pas à propos du paramètre Expect100Continue? –

+2

Une façon peut-être plus propre de définir la propriété ServicePoint.Expect100Continue de Twitter serait 'ServicePointManager.FindServicePoint (UpdateStatusEndpoint.Location) .Expect100Continue = false' –

+0

Andrew, je pensais à la propriété: webRequest.ServicePoint.Expect100Continue = false; Mais après avoir repensé, je suppose, cela n'a pas d'importance. Les deux contacteront probablement le ServicePointManager. – EricSch

0

LinqToTwitter est une bibliothèque client Twitter qui utilise DotNetOpenAuth. Je verrai à propos de l'ajout d'un exemple de publication de message à la bibliothèque principale DotNetOpenAuth pour une future version.

1

Définissez l'attente à "attendre: rien" ..ce est mon code:

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()));

il a travaillé pour moi ...

Questions connexes