WCF и веб-браузер.Потоковая проблема - PullRequest
0 голосов
/ 11 мая 2011

У меня есть DLL, которая анализирует некоторый веб-сайт. Этот компонент использует элемент управления WebBrowser из форм Windows с помощью метода Navigate ().

Также у меня есть хостинг WCF в IIS 7 и с базовым HTTBBinding.

Но когда я вызываю мой метод WCF, который использует dll с WebBrower из клиента, у меня появляется такое сообщение об ошибке:

Элемент управления ActiveX '8856f961-340a-11d0-a96b-00c04fd705a2' не может быть создан, поскольку текущий поток не находится в однопоточной квартире.

Есть ли способ разрешить эту неприятную ситуацию?

1 Ответ

0 голосов
/ 12 мая 2011

К счастью, я нашел ответ на вопрос. Этот код помогает мне:

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

В любом варианте вариант мне не помог.

...