以下代码在Visual Studio中运行正常,但部署到IIS7时网站崩溃。它似乎在Application.DoEvents行上失败,因为BrowsePage.ReadyState总是未初始化(0)并且从未完成(4)。它仅在部署到IIS时使用(使用版本7)。在Visual Sudio中调试时没关系:
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
我注意到在IIS上运行时,我无法访问PageURL变量中的网页。因此,我认为这是一个阻塞问题。
WinDBG说:CLR异常 - 代码e0434352(第一次机会)
答案 0 :(得分:0)
我试图理解为什么异步会帮助你解决问题。根据您的代码,我认为没有理由。如果您确实需要将图像转换为异步,则还有其他可能的方法来处理此问题,具体取决于转换的原因。
一个模式为图像设置占位符,然后使用来自客户端的AJAX调用。然后,您可以在服务端点的末尾进行转换。哦,如果现在更容易获得HTML5网络套接字会有多么有趣。
答案 1 :(得分:0)
我不会在ASP.Net中进行线程处理导致MAJOR问题不值得麻烦相信我曾经有过衬衫。
见
http://mohamedfaramawi.blogspot.com/2008/01/do-not-use-multi-threading-inside.html
我会设置一个Windows服务来查询数据库,以了解需要完成哪些工作,并让Windows服务完成。