Для WCF - Как вернуться к клиенту во время обработки - PullRequest
0 голосов
/ 28 марта 2019

У меня есть процесс 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 голосов
/ 28 марта 2019

Некоторые популярные опции:

  1. Вызов ProcessFile() в отдельном потоке

    - или -

  2. Рефакторинг вашего решения состоит из 3 частей:

    a) Создайте рабочую очередь (дБ) для отслеживания файлов, которые были загружены и должны быть обработаны.

    b) Вместо вызова ProcessFile() создайте функцию для "помещения" нового файла в рабочую очередь.

    c) Создайте автономный (или запланированный) процесс дляпериодически проверяйте очередь и обрабатывайте все файлы в очереди.

Второй вариант - более трудоемкий, но более эффективный и надежный шаблон.Это также дает вам больше возможностей в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...