WCF和WebBrowser。线程问题

时间:2011-05-11 16:44:50

标签: wcf iis webbrowser-control

我有一个解析一些网站的dll。此组件使用来自Windows窗体的WebBrowser控件并使用Navigate()方法。

此外,我在IIS 7中使用了基本的HttpBinding进行WCF托管。

但是当我调用我的WCF方法从客户端使用带有WebBrower的dll时,我有这样的错误消息:

ActiveX控件'8856f961-340a-11d0-a96b-00c04fd705a2'无法实例化,因为当前线程不在单线程单元中。

有办法解决这种不愉快的情况吗?

1 个答案:

答案 0 :(得分:0)

幸运的是,我找到了问题的答案。这段代码帮助我:

    [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)]

在任何选项中,变体都没有帮助我。