WCF和网络浏览器。线程问题
我有一个dll,可以解析一些网站。此组件使用Windows窗体中的WebBrowser控件,并使用导航方法 另外,我在IIS7中有一个WCF主机,并带有basicHttpBinding 但是,当我从客户端调用我的WCF方法(使用WebBrower的dll)时,我有这样的错误消息: 无法实例化ActiveX控件“8856f961-340a-11d0-a96b-00c04fd705a2”,因为当前线程不在单线程单元中WCF和网络浏览器。线程问题,wcf,iis,webbrowser-control,Wcf,Iis,Webbrowser Control,我有一个dll,可以解析一些网站。此组件使用Windows窗体中的WebBrowser控件,并使用导航方法 另外,我在IIS7中有一个WCF主机,并带有basicHttpBinding 但是,当我从客户端调用我的WCF方法(使用WebBrower的dll)时,我有这样的错误消息: 无法实例化ActiveX控件“8856f961-340a-11d0-a96b-00c04fd705a2”,因为当前线程不在单线程单元中 有什么办法可以解决这个令人不快的问题吗?我私下里找到了这个问题的答案。此代码帮助我
有什么办法可以解决这个令人不快的问题吗?我私下里找到了这个问题的答案。此代码帮助我:
[STAThread]
public Good GrabGood(string link)
{
_link = link;
var t = new Thread(Grab);
t.SetApartmentState(ApartmentState.STA);
t.Start();
t.Join();
return _good;
}
private Good _good;
private string _link;
private void Grab()
{
var grabber = new GoodsGrabber();
try
{
_good = grabber.GrabGood(_link);
}
catch (Exception)
{
_good = null;
throw;
}
}
类的这些属性如下:
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single, InstanceContextMode = InstanceContextMode.PerSession)]
在任何选项中,变体都不能帮助我。我们的情况与您相同,因为我们需要在WCF接口后面运行WebBrowser。以这种方式创建线程确实可以解决STA问题,但WebBrowser.DocumentCompleted事件不会在thread.Join返回控件之前引发。您是否在GoodsGrabber内部进行阻止,以确保在WCF返回之前,您想对网页执行的任何操作都会发生?请参阅此处的完整代码: