WCF和网络浏览器。线程问题

WCF和网络浏览器。线程问题,wcf,iis,webbrowser-control,Wcf,Iis,Webbrowser Control,我有一个dll,可以解析一些网站。此组件使用Windows窗体中的WebBrowser控件,并使用导航方法 另外,我在IIS7中有一个WCF主机,并带有basicHttpBinding 但是,当我从客户端调用我的WCF方法(使用WebBrower的dll)时,我有这样的错误消息: 无法实例化ActiveX控件“8856f961-340a-11d0-a96b-00c04fd705a2”,因为当前线程不在单线程单元中 有什么办法可以解决这个令人不快的问题吗?我私下里找到了这个问题的答案。此代码帮助我

我有一个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返回之前,您想对网页执行的任何操作都会发生?请参阅此处的完整代码: