WCF - 服务器线程以更快地向客户端发布
WCF - Threading at server to release to the client quicker
当一个函数被调用到服务器时,文件被上传并存储在一个文件夹中。然后必须处理该文件,这需要一些时间来完成并且会导致客户端超时。
为了解决这个问题,我在考虑通过将文件的处理放在一个单独的线程中以允许子例程在文件上传后 return 到客户端。并且文件的处理将在后台继续。
不幸的是,线程正在停止 return。我不明白我有什么问题。我认为通过使用线程,它可以让子例程完成并 return 到客户端。
Public Sub RestoreToOps(rFileInfo As RemoteFileInfo) Implements IRestore.RestoreToOps
Dim oLogItem As New LogItem
Dim sDestinationFolder As String = My.Settings.DestinationFolder
Try
Dim sFileDestination As String = Path.Combine(sDestinationFolder, rFileInfo.FileName)
If File.Exists(sFileDestination) Then
File.Delete(sFileDestination)
End If
Using fs As FileStream = New FileStream(sFileDestination, FileMode.Create, FileAccess.Write, FileShare.Read)
fs.Write(rFileInfo.FileBytes, 0, rFileInfo.FileBytes.Length)
End Using
ProcessFile(rFileInfo.FileName)
Catch ex As Exception
'Error Handling
End Try
End Sub
'*************************************************************************
Private Function ProcessFile(ByVal FileName As String) As Boolean
Dim oThread As Thread = Nothing
Dim oObject As Object = Nothing
Dim oLogItem As New LogItem
Dim sDBName As String = ""
Dim bSuccess As Boolean = False
Try
If InStr(FileName, "Move.zip") > 0 Then
sDBName = Replace(FileName, "Move.zip", "")
oThread = New Thread(New ParameterizedThreadStart(AddressOf MakeRestoreFromObject))
oThread.IsBackground = True
oThread.Start(sDBName)
oThread.Join()
End If
Catch ex As Exception
'Error Handling
End Try
Return bSuccess
End Function
函数 "MakeRestoreFromObject" 需要相当长的时间,当使用上面的代码时,子例程会等待函数完成,然后 returning.....
oThread.Join()
导致您的主线程阻塞,直到 oThread
完成。只需删除那行代码即可。
当一个函数被调用到服务器时,文件被上传并存储在一个文件夹中。然后必须处理该文件,这需要一些时间来完成并且会导致客户端超时。
为了解决这个问题,我在考虑通过将文件的处理放在一个单独的线程中以允许子例程在文件上传后 return 到客户端。并且文件的处理将在后台继续。
不幸的是,线程正在停止 return。我不明白我有什么问题。我认为通过使用线程,它可以让子例程完成并 return 到客户端。
Public Sub RestoreToOps(rFileInfo As RemoteFileInfo) Implements IRestore.RestoreToOps
Dim oLogItem As New LogItem
Dim sDestinationFolder As String = My.Settings.DestinationFolder
Try
Dim sFileDestination As String = Path.Combine(sDestinationFolder, rFileInfo.FileName)
If File.Exists(sFileDestination) Then
File.Delete(sFileDestination)
End If
Using fs As FileStream = New FileStream(sFileDestination, FileMode.Create, FileAccess.Write, FileShare.Read)
fs.Write(rFileInfo.FileBytes, 0, rFileInfo.FileBytes.Length)
End Using
ProcessFile(rFileInfo.FileName)
Catch ex As Exception
'Error Handling
End Try
End Sub
'*************************************************************************
Private Function ProcessFile(ByVal FileName As String) As Boolean
Dim oThread As Thread = Nothing
Dim oObject As Object = Nothing
Dim oLogItem As New LogItem
Dim sDBName As String = ""
Dim bSuccess As Boolean = False
Try
If InStr(FileName, "Move.zip") > 0 Then
sDBName = Replace(FileName, "Move.zip", "")
oThread = New Thread(New ParameterizedThreadStart(AddressOf MakeRestoreFromObject))
oThread.IsBackground = True
oThread.Start(sDBName)
oThread.Join()
End If
Catch ex As Exception
'Error Handling
End Try
Return bSuccess
End Function
函数 "MakeRestoreFromObject" 需要相当长的时间,当使用上面的代码时,子例程会等待函数完成,然后 returning.....
oThread.Join()
导致您的主线程阻塞,直到 oThread
完成。只需删除那行代码即可。