【发布时间】:2010-10-17 13:56:13
【问题描述】:
大家好,我有一个带有 web 方法的 web 服务,它通过 POST 接受来自客户端的 XML(不知道这是否真的重要),验证 XML 和里面的数据,然后处理 XML 并返回一个答案客户。
目前,我遇到了大型 XML 的问题; XML 预处理完成时间过长,客户端超时。
我认为我可以通过在处理 XML 的验证之后启动一个新线程并同时将验证答案返回给客户端来将 XML 验证与 XML 处理分开,而不是增加客户端的超时时间。 (如果 XML 无效,则不会开始处理。
现在我的问题是:打开新线程会增加内存使用量吗?通常我会猜测它会(对于普通应用程序)但在这里我向客户端返回一个答案并基本上结束主线程的进程。
还有一个问题,我实际上试图创建一个小型 web 服务,但出于某种原因,即使 web 方法完成,客户端也不会得到答案,直到线程死亡......我我做错了什么?
好的,我重写了小型 Web 服务,它确实有效(我还没有在真实代码上尝试过 - 它有点复杂)。
如果有人想要,这是示例代码:
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.ComponentModel
' To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
' <System.Web.Script.Services.ScriptService()> _
<System.Web.Services.WebService()> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class DemoService
Inherits System.Web.Services.WebService
<WebMethod()> _
Public Function XMLReceiver(ByVal XMLData As String) As Integer
Dim retval As Integer = Validate(XMLData)
Dim thrd As New Threading.Thread(AddressOf Process)
thrd.Start()
Return retval
End Function
Public Function Validate(ByVal XMLData As String) As Integer
Return 0
End Function
Public Sub Process()
'get time
Dim start As Date = Date.Now
'do work
Threading.Thread.Sleep(1000 * 10)
'notification (actually write to DB)
Dim writer As New IO.StreamWriter("C:\done.txt")
writer.WriteLine("From " & start.ToLongTimeString & " To " & Date.Now.ToLongTimeString & " done!")
writer.Close()
End Sub
End Class
所以现在这只是第一个问题的问题。
谢谢大家
【问题讨论】:
-
你能展示你用来创建/加入你的线程的代码吗?
标签: vb.net multithreading web-services