Правильно, это скорее всего не сработает.Элемент управления WebBrowser предназначался для использования одним потоком STA.Он не будет хорошо отображаться в MTA в веб-сервисе и, вероятно, потребует некоторых серьезных хакерских атак.
Что вы пытаетесь сделать?Если вы можете описать вашу проблему, мы сможем найти альтернативное решение.
edit
Хорошо, это возможно, хотя, конечно,Hacky.Вот теоретическая реализация:
- Раскрутите поток STA, дождитесь его потока веб-службы.
- Загрузите браузер в поток STA.
- Навигацияна нужную веб-страницу.Когда навигация завершится, сделайте снимок экрана.
- Отправьте снимок назад в ветку веб-службы.
Код будет выглядеть примерно так:
public Bitmap GiveMeScreenshot()
{
var waiter = new ManualResetEvent();
Bitmap screenshot = null;
// Spin up an STA thread to do the web browser work:
var staThread = new Thread(() =>
{
var browser = new WebBrowser();
browser.DocumentCompleted += (sender, e) =>
{
screenshot = TakeScreenshotOfLoadedWebpage(browser);
waiter.Set(); // Signal the web service thread we're done.
}
browser.Navigate("http://www.google.com");
};
staThread.SetApartmentState(ApartmentState.STA);
staThread.Start();
var timeout = TimeSpan.FromSeconds(30);
waiter.WaitOne(timeout); // Wait for the STA thread to finish.
return screenshot;
};
private Bitmap TakeScreenshotOfLoadedWebpage(WebBrowser browser)
{
// TakeScreenshot() doesn't exist. But you can do this using the DrawToDC method:
// http://msdn.microsoft.com/en-us/library/aa752273(VS.85).aspx
return browser.TakeScreenshot();
}
Такжепримечание из прошлого опыта: мы видели проблемы, когда System.Windows.Forms.WebBrowser не перемещается, если он не добавлен к визуальному родителю, например к Форме.Ваш пробег может варьироваться.Удачи!