Kein Error-Event bzw. HttpStatusCode-Eigenschaft im WebBrowser-Control?

12/10/2009 - 00:45 von Andreas Mahub | Report spam
Hi,

ich reibe mir gerade Kopfschüttelnd meinen Drei-Tage-Bart (muss ich echt mal
rasieren).

Ich habe eine Klasse geschrieben, welche mir ein Screenshot einer Webseite
erstellen soll. Klappt auch super. Ich kann mir alle erdenklichen Websites
als Screenshot in einer .jpg-Datei speichern und mit denen machen was ich
will. Alles ganz toll, ABER!

So fange ich an:
Dim wb As New WebBrowser()

Denkt jetzt aber mal nicht, dass ich mit wb.StatusCode oder
wb.HttpStatusCode oder wb.Status erfahren kann, ob und in wie weit der
Aufruf einer URL erfolgreich war oder nicht?! Was man nehmen könnte wàre
zwar wb.StatusText, diese liefert mir allerdings in allen erdenklichen Lagen
"Fertig". Egal ob Error 404, 302 oder 200. Es wird immer "Fertig"
zurückgegeben.

Schön wàre allerdings:
If wb.HttpStatusCode = 404 Then MistDummGelaufen()

noch viel viel schöner wàre
If wb.HttpStatusCode = Error404 Then SeiteNichtGefunden()

Und das seit Framework 2.0!!!!! - Wir sind bereits (fast) bei Version 4.0 -
Internet ist die Zukunft.

Wenn ich aber nach einer Lösung suche wie ich rausfinden kann ob der Aufruf
erfolgreich war oder nicht, dann erhalten ich von Microsoft folgenden Tipp:
http://msdn.microsoft.com/en-us/lib...createsink(VS.80).aspx
"The following code example illustrates the use of this method in a class
derived from WebBrowser that supplements the normal WebBrowser events with
the NavigateError event from the OLE DWebBrowserEvents2 interface. "

Der VB.NET Quellcode den ICH jetzt lt. Microsoft und .NET-Befürwortern
einfügen MÜSSTE, wàren geschlagene 188 Zeilen lang!!!!!!!!!!!!

Ein Traum (oder Zumutung) wàre wohl eine Eigenschaft wie zum Beispiel
wb.StatusCode ?! oder wb.ReceivedServerStatusCode was auch immer?! Und das
nach 3 sogar fast 4 Jahren!!!

Seit mir bitte nicht böse das ich gerade "leicht erregt" bin, aber es kann
doch nicht sein, dass mir als Tipp von Microsoft über 100 Zeilen Quellcode
um die Ohren geworfen werden, statt den Hörer in die Hand zu nehmen, einen
der Entwickler dieses Controls anzurufen um zu sagen "Du wir haben hier
schon viele Anfragen, kannst du nicht mal eine Eigenschaft anlegen welches
angibt welcher Status-Code vom Server zurückgegeben wurde? Wir tippern hier
schon über 100 Zeilen!".

Nein, es wird sogar vom Support getippt und getippt, über 100 Zeiclen sowohl
für VB als auch C# getippert (als Notlösung würde ich das sogar verstehen)
aber bis heute keine passende Eigenschaft welche ja nun wirklich kein
Problem sein dürfte und es aus meiner Sicht auch selbstverstàndlich wàre.
Jeder Seitenaufruf hat entweder einen Erfolg oder auch nicht. Aber seit 2.0
wird man da als Entwickler irgendwie im Regen stehen gelassen :-(

Gruß
Andy
 

Lesen sie die antworten

#1 Thorsten Doerfler
12/10/2009 - 15:50 | Warnen spam
Andreas Mahub schrieb:
Wenn ich aber nach einer Lösung suche wie ich rausfinden kann ob der Aufruf
erfolgreich war oder nicht, dann erhalten ich von Microsoft folgenden Tipp:
http://msdn.microsoft.com/en-us/lib...createsink(VS.80).aspx
"The following code example illustrates the use of this method in a class
derived from WebBrowser that supplements the normal WebBrowser events with
the NavigateError event from the OLE DWebBrowserEvents2 interface. "

Der VB.NET Quellcode den ICH jetzt lt. Microsoft und .NET-Befürwortern
einfügen MÜSSTE, wàren geschlagene 188 Zeilen lang!!!!!!!!!!!!



Das ist ein recht vollstàndiges Beispiel, wie Du das NavigateError Event
für das .NET WebBrowser Control implementieren kannst. Reduziert auf das
Notwendigste, also alleine für Deine StatusCode-Eigenschaft, könnte
alleine alles entfallen, was für den EventHandler und die EventArgs
notwendig ist.

Aber ich finde es positiv, dass Beispiele in der MSDN so aufgebaut sind,
dass man gleich sieht, wie man es "richtig" macht.

Du musst eigentlich nur noch das Beispiel kopieren, in ein neues
Klassenmodul einfügen und hast alles was Du brauchst. Ein wenig muss man
eben auch mit .NET 2.0 noch programmieren. Wobei ich Copy & Paste nicht
als große Programmierleistung sehen würde.

Nein, es wird sogar vom Support getippt und getippt, über 100 Zeiclen sowohl
für VB als auch C# getippert (als Notlösung würde ich das sogar verstehen)
aber bis heute keine passende Eigenschaft welche ja nun wirklich kein
Problem sein dürfte und es aus meiner Sicht auch selbstverstàndlich wàre.
Jeder Seitenaufruf hat entweder einen Erfolg oder auch nicht.



Das Webbrowser Control selber wurde erst mit .NET 2.0 eingeführt. Eine
mögliche Erklàrung für das Fehlen einer solchen Eigenschaft und des
NavigateError Events, könnte sein, dass das .NET Framework mit dem IE
5.01 kompatibel sein sollte, um so auch Windows 2000 noch zu
unterstützen. Das NavigateError Event gibt es allerdings erst im IE 6:

DWebBrowserEvents2::NavigateError Event
http://msdn.microsoft.com/en-us/lib...85%29.aspx

"DWebBrowserEvents2::NavigateError was introduced in Microsoft Internet
Explorer 6."

Aber seit 2.0
wird man da als Entwickler irgendwie im Regen stehen gelassen :-(



Wenn DAS o.g Dein einziges Problem ist, das soviel Ärger in Dir auslöst,
dann solltest Du über eine Umschulung nachdenken. Bàcker oder so etwas. ;-)

Thorsten Dörfler
Microsoft MVP Visual Basic

vb-hellfire visual basic faq | vb-hellfire - einfach anders
http://vb-faq.de/ | http://www.vb-hellfire.de/

Ähnliche fragen