2010-01-15 6 views
1

J'ai une classe de code de bibliothèque qui utilise un contrôle System.Windows.Forms.WebBrowser pour charger une page web puis extraire des informations de l'arbre DOM, etc ... J'ai trouvé ceci pour être le seul moyen fiable d'être en mesure d'analyser les informations chargées sur une page avec javascript, etc ...C# asp.net utilise Windows Forms WebBrowser

Cela a bien fonctionné lors des tests avec l'application console, mais quand j'appelle la même méthode à partir d'une page asp.net (ASP.NET MVC Controller) il se bloque avec un "contrôle ActiveX '8856f961-340a-11d0-a96b-00c04fd705a2' ne peut pas être instancié car le thread actuel n'est pas dans un appartement monothread." ... J'ai essayé d'ajouter [STAThread] à ma méthode mais cela ne semble pas aider!

Des idées?

Merci

Mise à jour:

Je dois permettre à une page pour remplir la charge et exécuter toutes ses javascript, puis recherchez pour le texte qui correspond à un modèle que je l'ai déjà stocké ... Ne pensez pas HtmlAgilityPack va fonctionner? Est-ce que WatIn exécute le javascript?

Répondre

0

Je crois qu'il est impossible d'exécuter IIS dans un modèle STA (single thread apartment model). Au lieu d'utiliser le contrôle WebBrowser, vous pouvez jeter un oeil à la HTML Agility Pack. Il vous permettra de lire dans une page Web et de fouiller dans le DOM. Le contrôle WebBrowser utilise beaucoup de ressources informatiques que vous n'aurez pas à vous soucier de faire le changement.

0

Tout dans System.Windows est conçu pour le bureau, et non pour le Web. Je suis d'accord avec Jake Pearson que vous devriez utiliser autre chose. Mais si vous voulez, vous pouvez essayer de forcer la page en mode STA utilisant cette directive:

<%@Page AspCompat="true"%> 

http://msdn.microsoft.com/en-us/library/zwk9h2kb.aspx