使用Web浏览器控件时,Webservice会引发内部服务器错误

时间:2010-09-04 17:06:56

标签: c# web-services browser

我有一个使用C#创建的Web服务。出于某种原因,每当我调用我的公开方法时,它似乎都会抛出500内部服务器错误。我设置了一些断点,发现以下行是它的作用:

m_Browser = new WebBrowser();

知道为什么这条线会导致我的服务崩溃? WebBrowser控件位于System.Windows.Forms命名空间中。

2 个答案:

答案 0 :(得分:4)

这可能是因为documentation clearly states it

  

只能使用WebBrowser类   在线程中设置为单线程   公寓(STA)模式。要用这个   class,确保您的Main方法是   用STAThreadAttribute标记   属性。

web service runs in a multi thread apartment mode(MTA)。同一篇文章显示了可用于在STA模式下运行Web服务的hack,但这样做的性能可能会降低。

显然,WebBrowser控件不应在Web服务中使用,而应在具有GUI的客户端应用程序中使用。因此,通常当你试图将某些东西用于这个不适合的场景时,需要付出代价。

答案 1 :(得分:0)

此处记录了iMacros Web宏录制器的相同问题:

http://wiki.imacros.net/Web_Scripting#How_to_run_iMacros_unattended

解决方法提到了在“RemoteInteractive”模式下运行iMacros(=带有webbrowser控件的应用程序!)(有关详细信息,请参阅Windows登录类型)。我们使用方法,它适用于我们的项目(网络抓取)。