我有一个使用C#创建的web服务。出于某种原因,每当我调用我公开的方法时,它似乎会引发500次内部服务器错误。我设置了一些断点,发现以下行是什么:当使用webbrowser控件时,Webservice抛出内部服务器错误
m_Browser = new WebBrowser();
任何想法为什么这行会导致我的服务崩溃? WebBrowser控件位于System.Windows.Forms命名空间中。
我有一个使用C#创建的web服务。出于某种原因,每当我调用我公开的方法时,它似乎会引发500次内部服务器错误。我设置了一些断点,发现以下行是什么:当使用webbrowser控件时,Webservice抛出内部服务器错误
m_Browser = new WebBrowser();
任何想法为什么这行会导致我的服务崩溃? WebBrowser控件位于System.Windows.Forms命名空间中。
这可能是因为作为documentation clearly states it
web浏览器类只能在设置为单线程 单元(STA)模式的线程中使用 。要使用此类 类,请确保使用STAThreadAttribute 属性标记的Main方法为 。
while a web service runs in a multi thread apartment mode(MTA)。这篇相同的文章展示了一种可以用来在STA模式下运行您的Web服务的黑客攻击,但这样做的表现可能会降低。
很明显,WebBrowser
控件并不是用于Web服务中,而是用于具有GUI的客户端应用程序中。所以通常当你试图将某些东西用于某种情况时,这是不值得的,因此需要付出代价。
同样的问题被记录为iMacros的网页宏录制这里:
http://wiki.imacros.net/Web_Scripting#How_to_run_iMacros_unattended
的解决方法提到有运行的iMacros(=应用程序与WebBrowser控件!)在“RemoteInteractive “模式(有关更多详细信息,请参阅Windows登录类型)。我们使用方法,它适用于我们的项目(网络抓取)。