Did you know that you can navigate the posts by swiping left and right?

Twitter-Fehler 417 (Expectation Failed)

06 Jan 2009 . Unknown . Comments

Seit dem 23. Dezember 2008 verursachte der von mir verwendete Twitter-Wrapper “Yedda’s C# wrapper” beim Versuch den Tweet zu aktualisieren eine Ausnahme:

Your tweet could not be sent: The remote server returned an error: (417) Expectation Failed.

Ich setze diese Funktion eigentlich nur in meinen Blogs ein um ein Update zu twittern sobald ein neuer Beitrag geschrieben wurde. Allerdings war es doch ein wenig ärgerlich das es nicht mehr ging und zwischen den Jahren habe ich deshalb ein wenig recherchiert. Bei Shital Shah fand ich schließlich die Lösung: Twitter hat die Unterstützung für den HTTP-Header “100-Continue” – vermutlich aus Gründen der Performance – deaktiviert. Man muss also dieses Standartverhalten der HttpWebRequest-Klasse direkt in der Yedda-DLL abschalten damit diese wieder Aktualisierungen senden kann.

Da nicht jeder der den Wrapper verwendet auch Programmierer ist, der das mal eben schnell selber ändern und neukompilieren kann (bsp. wenn man ein Blog-Plugin verwendet, dass auf die YeddaTwitter.dll angewiesen ist), möchte ich hier die geänderte Version für alle zum Download bereitstellen inklusive dem geänderten Projekt.

Downloads

Yedda.Twitter.Dll Yedda.Twitter.Dll
DLL File
11.5 KB

YeddaTwitter.7z YeddaTwitter.7z
7z File
4.8 KB

Vorsicht, Technik: Hintergrundinformationen

Der HTTP-Header mit dem Wert “100-Continue” sagt dem Server, dass alle Daten in einer zweiten Anforderung übermittelt werden. Wenn der Server eine Weiterleitung oder Authentifizierung aktiviert hat wird diese also sofort bei dieser ersten Übermittlung an den Client gesendet ohne das überflüssige Daten bereits übermittelt wurden. Das hat bei der Übermittlung größerer Datenmengen und in langsamen Netzwerken Vorteile. Auch wenn ein Großteil der verwendeten Server eine Weiterleitung oder eine Authentifizierung aktiviert haben kann aus dem Verhalten ein Vorteil gezogen werden. Der Nachteil von dieser Methode ist allerdings, dass jetzt für jede Kommunikation doppelt so viele Anfragen an den Server gesendet werden und sich das bei hoher Last negativ auf die Server-Performance auswirkt.

Die HttpWebRequest-Klasse aus dem .NET-Framework sendet diesen HTTP-Header standartmäßig mit. Um ihn zu deaktivieren muss man die entsprechende Eigenschaft im ServicePointManager deaktivieren:

System.Net.ServicePointManager.Expect100Continue = false;
Questions/Suggestions
As always, for questions or feedback, contact me or leave a comment.

Octocat by GitHubEdit this page on GitHub