对于WCF-如何在处理过程中返回客户端

时间:2019-03-28 13:52:06

标签: vb.net wcf

我有一个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分钟的处理时间,如果有多个调用进入,则可能需要更长的时间。

1 个答案:

答案 0 :(得分:0)

一些受欢迎的选择是:

  1. 在单独的线程上调用ProcessFile()

    -或-

  2. 将您的解决方案重构为包含三个部分:

    a)创建一个工作队列(db),以跟踪已上传并需要处理的文件。

    b)而不是调用ProcessFile(),而是使用一个函数将新文件“排队”到工作队列中。

    c)创建一个独立的(或计划的)进程,以定期检查队列并处理队列中的任何文件。

第二个选项工作量更多,但它是一种更好且更可靠的模式。它还为您提供了更多的选择。