Caching und das WebBrowser-Steuerelement in .Net
Bin ich mit dem WebBrowser-Steuerelement in .Net ausführen einige 3rd-party-affiliate-marketing-Konvertierungen.
Habe ich eine queue-Tabelle in einer Datenbank mit allen scripts/images ausführen. Ich Schleife durch alle diese in einer WinForms app mit dem WebBrowser-Steuerelement. Nachdem ich ausgeführt habe, ein Skript/Bild, das ich über den WebBrowser zu Steuern, setzen Sie ihn auf null, und erneuert es mit einem neuen WebBrowser-control-Instanz.
Betrachten Sie diese URL ein: http://renderserver/RenderScript.aspx?id=1
RenderScript.aspx zeigt ein Bild mit einer URL, z.B.: http://3rdparty/img.ashx?id=9343
Ich verwenden Sie Fiddler, um zu sehen, alle Anfragen und Antworten, und wenn dieselbe URL zweimal ausgeführt wird, verwendet es eine Art cache. Das cache vorhanden ist, unter dem WebBrowser-Steuerelement selbst.
Diesen cache bedeutet, dass der img.ashx nicht genannt.
Ich habe versucht, mithilfe von Internet Explorer anfordern der URL: http://renderserver/RenderScript.aspx?id=1 und drücken Sie die Taste F5. Dann ist es angefordert perfekt.
Aber wenn ich auf die Adressleiste und trifft Sie die EINGABETASTE, um zu navigieren, um die gleiche URL wieder - es ist nicht angefordert. Wenn ich mit Firefox wird die Seite anfordern und Bild jedes mal, egal ob ich F5 oder navigieren über die Adressleiste.
Fand ich einige Win32-API-Aufrufe ( http://support.microsoft.com/kb/326201 ), die in der Lage war, den cache zu löschen. Es funktionierte auf meiner lokalen Maschine. Dann die app wurde bereitgestellt, um einen server mit Windows Server 2003 Standard x64 (meine eigene Maschine ist Vista x86).
Und nun der API-Aufrufe den cache zu löschen, nicht funktioniert.
Irgendwelche Ideen auf, warum die API-Aufrufe, funktioniert nicht auf Windows Server, funktioniert aber auch auf Vista? Beide Maschinen laufen IE8.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte das gleiche problem (sehr) eine Weile zurück. Microsoft hat eine Seite, die war sehr hilfreich mit diesem:
http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/q326/2/01.asp&NoWebContent=1
Erstellte ich eine Klasse aus dem Microsoft-sample, allerdings hatte ich auch ein paar if-Anweisungen, um die Verarbeitung abzubrechen, wenn es keine posten mehr; es ist schon eine Weile jetzt, aber ich bin mir ziemlich sicher, es würde ein Fehler ausgelöst (siehe
ERROR_NO_MORE_ITEMS
im code unten).Ich hoffe hilfreich!!!
Verwenden Sie es in Ihrem code, rufen Sie einfach an:
bevor Sie den navigate-Methoden.
Fiddler verwendet grundsätzlich der gleiche code wie in dem KB-Artikel zu löschen, die WinINET-cache, und ich benutze es auf Win2k3 jeden Tag.
Anstatt abwischen der gesamte cache, der richtige fix ist, um die richtigen HTTP-response-header zu verbieten caching. Erfahren Sie mehr über die WinINET-caching hier: http://www.enhanceie.com/redir/?id=httpperf
(Alternativ können Sie fügen Sie einfach eine randomisierte query-string-parameter; auf diese Weise, jedes mal, wenn die Steuerung trifft auf eine Anforderung für die Ressource, die URL ist anders und der cache ist somit automatisch umgangen.)
Versuchen, diese...
Utilities.Web.WebBrowserHelper.WebBrowserHelper.ClearCache();
definiert?Dass Sie im kb-Artikel alle links zu zahlreiche Fehler in der it (wo die ausgewählte Antwort der source-code kam), und ich habe verschwendet ~2 Tage versucht, es zu erhalten zu arbeiten, in der alle notwendigen Einstellungen. Es ist die Kopie eingefügt über das internet, und es gibt zahlreiche bugs berichtet auf Basis von OS und IE-version.
Fiddler ' wurde ursprünglich von einem Microsoft-Mitarbeiter, und ist powered by FiddlerCore.dll. Telerik (die aktuellen Eigentümer/- Betreuer/- Verkäufer) von Fiddler noch aktualisieren, pflegen und verschenken FiddlerCore kostenlos. Wenn Sie nicht möchten, fügen Sie einen Verweis auf FiddlerCore, kann man zerlegen Sie die dll, und es zeigt den RICHTIGEN Weg zu nennen, alle diese schrecklich dokumentiert WinINet-Funktionen, aber ich denke, das posting hier wäre ein Bärendienst für Telerik /plagarism.
Derzeit Fiddlercore ist hier gehostet: http://www.telerik.com/fiddler/fiddlercore
Den original-code aus
https://support.microsoft.com/en-us/kb/326201
scheint buggy
überprüfung der MSDN-Dokumentation und auch die VB version hier:
https://support.microsoft.com/en-us/kb/262110
Ich veränderte den code so und nun für es ist, für mich zu arbeiten (das Problem wurde auf die Ausführung der FindNextUrlCacheGroup und FindNextUrlCacheEntry):
Dies sollte den trick tun: