2012-02-22 2 views
1

Следующий код работает нормально в Visual Studio, но веб-сайт падает при развертывании в IIS7. Кажется, что он не работает в строке Application.DoEvents, потому что BrowsePage.ReadyState всегда не инициализируется (0) и никогда не завершается (4). Это происходит только при развертывании в IIS (с использованием версии 7). Это нормально при отладке в визуальной Sudio:ASP.NET Threading

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click 
      Dim url As String = Request.Url.AbsoluteUri 
      Dim Test As Bitmap = ImageFromHtml.ConvertPage(url) 
    End Sub 

    Public Function ConvertPage(ByVal PageUrl As String) As Bitmap 
      Me.PageUrl = PageUrl 
      Dim thrCurrent As New Thread(New ThreadStart(AddressOf CreateImage)) 
      thrCurrent.SetApartmentState(ApartmentState.STA) 
      thrCurrent.Start() 
      thrCurrent.Join() 
      Return ConvertedImage 
     End Function 

    Private Sub CreateImage() 
     Dim BrowsePage As New WebBrowser() 
     BrowsePage.ScriptErrorsSuppressed = False 
     BrowsePage.ScrollBarsEnabled = False 
     BrowsePage.Navigate(PageUrl) 
     AddHandler BrowsePage.DocumentCompleted, AddressOf _ 
WebBrowser_DocumentCompleted 
     While BrowsePage.ReadyState <> WebBrowserReadyState.Complete 
      Application.DoEvents() 
     End While 
     BrowsePage.Dispose() 
    End Sub 

Я заметил, что я не могу получить доступ к веб-странице в переменной PAGEURL в то время как это работает на IIS. Поэтому я считаю, что это проблема блокировки.

WinDBG говорит: CLR исключение - код e0434352 (первый шанс)

+0

Хммм, очень интересно, и одно можно сказать точно: кажется, что ваш сайт падает при развертывании на IIS7 (на линии соединения)! Прямо сейчас, хорошая вещь, чтобы добавить к вашему вопросу будет ошибка сбоя, которую вы видите, когда сайт падает. – Kiril

+0

@Lirik, спасибо. Я отредактировал вопрос. – w0051977

+0

Что-нибудь еще, кроме «исключения CLR - код e0434352»? – Kiril

ответ

0

Я пытаюсь понять, почему асинхронность помогает вашей проблеме. Основываясь на вашем коде, я не вижу причин. Если вам нужно преобразование изображения для асинхронизации, есть другие возможные способы справиться с этим, в зависимости от того, почему преобразование.

В одном шаблоне устанавливается место для изображения, а затем используются вызовы AJAX со стороны клиента. Затем вы можете выполнить преобразование в конце конечной точки службы. О, какая забава была бы, если бы веб-сокеты HTML5 были более доступны сейчас.

+0

Asyncrony не помогает. Я пытаюсь захватить снимок экрана, и, насколько я вижу, у меня есть два варианта: 1) Как вы говорите; сделать снимок экрана на клиенте и отправить на сервер с помощью AJAX, 2) Использовать серверный объект WebBrowser. Я выбрал вариант 2. Знаете ли вы, почему программа зависает? – w0051977

0

Я бы не стал нанизать в ASP.Net, он вызывает ОСНОВНЫЕ проблемы, которые не стоят проблемы, поверьте, что там была рубашка.

см

http://mohamedfaramawi.blogspot.com/2008/01/do-not-use-multi-threading-inside.html

Я бы вместо того, чтобы настроить сервис окна для запросов к базе данных, чтобы узнать, что нужно сделать, и пусть обслуживание окон Работа это сделать.

+1

Threading в любой среде может привести к серьезным проблемам, если они выполнены неправильно или если сторонний API имеет особые требования, которые мешают ему работать правильно. Я использовал различные формы многопоточности в ASP.NET, и единственные проблемы, которые я когда-либо делал, были сами собой. –

+1

Аминь на самообороны. Какое введение в многопоточность НЕ поставляется с предупреждающим знаком? :) –