HtmlElement.InvokeMember("Click") funktioniert nicht auf IIS

26/12/2007 - 19:04 von Berti Müller | Report spam
Hallo,

erst einmal hoffe ich, dass hier alle eine schöne Weihnacht hatten.
Ich habe ein Problem, bei dem ich nicht mehr weiter weiß. Meine Aufgabe
ist es einen WebService zu schreiben, der Informationen von mehreren
Datenquellen holt und diese gemeinsam zurück gibt. Eine dieser
Datenquellen ist eine Webseite. Ich habe zu diesem Zweck eine dll
geschrieben, die dem WebService die Informationen liefert. In dieser dll
öffne ich mehrere Threads. In einem dieser Threads öffne ich mit
Application.Run(.) ein Form. Diese Form wird nicht angezeigt
(WindowState=Minimized). In diesem Form befindet sich ein
Webbrowser-Steuerelement. Das Webbrowser-Steuerelement làdt beim Start
die entsprechende Seite. Ich fülle nun div. Textboxen auf der Seite nach
folgendem Muster:

HtmlDocument htmlDoc = this.webBrowser.Document;
HtmlElement htmlElem = htmlDoc.GetElementById("id");
htmlElem.SetAttribute("value", "Ein_String");

Als letztes hole ich mir einen Button auf der Seite und benutze die
Methode InvokeMember() um das "Click"-Ereignis auszulösen.

htmElem = htmlDoc.GetElementById("idButton");
htmElem.InvokeMember("Click");

Dies funktioniert alles hervorragend, solange ich es unter Visual Studio
2005 laufen lasse (nicht auf dem IIS). Wenn ich den Webservice inkl. dll
auf dem IIS (Version 5.1) laufen lasse, hat die Methode
InvokeMember("Click") keine Auswirkung auf die Webseite im
Webbrowser-Steuerelement (es wird auch kein Fehler ausgelöst). Ich
bekomme zwar mit GetElementById() die Html-Elemente der Seite und kann
diesen auch Werte zuweisen, aber beim Aufruf von InvokeMember("Click")
wird keine neue Seite geladen. Auch die Überladung InvokeMember(String,
Object[]) bringt das gleiche Ergebnis.

Der Button ist HTML-INPUT Element mit type=submit.

Vielleicht kennt ja jemand von euch eine Lösung.

Vielen Dank

Berti Müller
 

Lesen sie die antworten

#1 Stefan Falz [MVP]
26/12/2007 - 23:37 | Warnen spam
Hallo Berti,

"Berti Müller" schrieb:

geschrieben, die dem WebService die Informationen liefert. In dieser dll öffne ich mehrere Threads.



Die Dll ist die, die über den Webservice aufgerufen wird?

In einem dieser Threads öffne ich mit Application.Run(.) ein Form.



In einer Webanwendung? Was willst Du denn damit?

Diese Form wird nicht angezeigt (WindowState=Minimized).



Minimized <> Nicht anzeigen.

In diesem Form befindet sich ein Webbrowser-Steuerelement.



Wenn ich das richtig verstanden habe, soll dein Webservice eine andere
Webseite aufrufen und dort Werte übergeben, richtig? Falls ja, ist das
IMO eine völlig falsche Vorgehensweise. Sende die benötigten Daten per
POST oder GET Request (je nach Anforderung der Zielseite) an den Server
und lies das Ergebnis aus. Siehe bspw.

http://msdn2.microsoft.com/de-de/li...webrequest(VS.80).aspx

Tschau, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

Ähnliche fragen