我有一个WCF进程将文件上传到服务器。上传文件后,我需要处理该文件。但我不想让客户端等待处理该文件。
我也同时关注多个请求。我相信每个请求都会产生一个新线程来缓解这个问题。重要提示:同时上载的文件名将不是同一个文件名。
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
End Try
End Sub
<MessageContract>
Public Class RemoteFileInfo
<MessageHeader>
Public FileName As String
<MessageBodyMember(Order:=1)>
Public FileBytes() As Byte
End Class
客户端必须等待ProcessFile()函数完成才能返回客户端。这是无法接受的!如果有多个呼叫进入,ProcessFile()函数可能需要2分钟才能处理,并且更长。
一些流行的选择是:
ProcessFile()
- 要么 - ProcessFile()
,而是创建一个函数将新文件“排入”工作队列。
c)建立独立(或计划)进程以定期检查队列并处理队列中的任何文件。第二种选择是更多的工作,但是更好,更可靠的模式。它还为您提供更多选择。