Привет всем У меня есть веб-сервис с веб-методом, который принимает XML от клиента через POST (не знаю, действительно ли это имеет значение), проверяет XML и данные внутри, и затем обрабатывает XML и возвращает ответ клиенту.работает поток изнутри vb.net webservice
В данный момент у меня проблема с большими XML-файлами; для завершения предварительной обработки XML требуется слишком много времени, и истечет время ожидания клиентов.
Вместо увеличения тайм-аута клиента я думал, что могу отделить проверку XML от обработки XML, запустив новый поток после проверки, который обрабатывает XML и в то же время возвращает ответ проверки правильности клиенту. (обработка не начнется, если XML недействителен.
Теперь мой вопрос: Будет ли новый поток увеличивать использование памяти? Обычно я предполагаю, что это будет (для обычных приложений), но здесь я возвращаюсь ответ клиента и по существу окончания процесса основного потока.
и еще один вопрос, я на самом деле пытался создать небольшой WebService, который делает только что, но по какой-то причине, даже если WebMethod был закончен, клиент не получал бы ответа до тех пор, пока нить не погибла ... я делаю что-то не так?
Хорошо, я переписал небольшой веб-сервис, и он работает (я еще не пробовал это на реальном коде) - это немного сложнее).
Это пример кода, если кто-то хочет его:
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
Так теперь это только вопрос первого вопроса.
Спасибо всем
Не могли бы вы показать код, который вы использовали для создания/присоединения к своей теме? – smirkingman