我有一个使用C#创建的Web服务。出于某种原因,每当我调用我的公开方法时,它似乎都会抛出500内部服务器错误。我设置了一些断点,发现以下行是它的作用:
m_Browser = new WebBrowser();
知道为什么这条线会导致我的服务崩溃? WebBrowser控件位于System.Windows.Forms命名空间中。
答案 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登录类型)。我们使用方法,它适用于我们的项目(网络抓取)。