2010-09-04 73 views
0

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

m_Browser = new WebBrowser(); 

任何想法为什么这行会导致我的服务崩溃? WebBrowser控件位于System.Windows.Forms命名空间中。

回答

4

这可能是因为作为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的客户端应用程序中。所以通常当你试图将某些东西用于某种情况时,这是不值得的,因此需要付出代价。

0

同样的问题被记录为iMacros的网页宏录制这里:

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

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

相关问题