对于WCF - 如何在仍处理时返回客户端

问题描述 投票:0回答:1

我有一个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分钟才能处理,并且更长。

vb.net wcf
1个回答
0
投票

一些流行的选择是:

  1. 在一个单独的线程上调用ProcessFile() - 要么 -
  2. 重构您的解决方案由3部分组成: a)创建工作队列(db)以跟踪已上载且需要处理的文件。 b)不要调用ProcessFile(),而是创建一个函数将新文件“排入”工作队列。 c)建立独立(或计划)进程以定期检查队列并处理队列中的任何文件。

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

© www.soinside.com 2019 - 2024. All rights reserved.