IO.FileStream не работает, когда MessageContract изменен на DataContract

У меня есть очень простой сервис WCF, который получает загруженные документы. Когда он определен как, он отлично работает:


Public Interface ITransferService

    
    
    Function UploadFile(ByVal request As RemoteFileInfo) As MyWebMethodResult

End Interface


Public Class RemoteFileInfo
    Implements IDisposable

    
    Public FileName As String

    
    Public Length As Long

    
    Public FileByteStream As System.IO.Stream

    Public Sub Dispose() Implements IDisposable.Dispose
        If FileByteStream IsNot Nothing Then
            FileByteStream.Close()
            FileByteStream = Nothing
        End If
    End Sub

End Class

Тем не менее, я был немного смущен в использовании MessageContractAttribute, и большинство авторов предлагают сохранить простые вещи с помощью DataContract. Однако, когда я изменяю сказанное выше, как это ...


Public Interface ITransferService

    
    
    Function UploadFile(ByVal request As RemoteFileInfo) As MyWebMethodResult

End Interface


Public Class RemoteFileInfo
    Implements IDisposable

    
    Public FileName As String

    
    Public Length As Long

    
    Public FileByteStream As System.IO.Stream

    Public Sub Dispose() Implements IDisposable.Dispose
        If FileByteStream IsNot Nothing Then
            FileByteStream.Close()
            FileByteStream = Nothing
        End If
    End Sub

End Class

Когда я пытаюсь загрузить в службу, я получаю следующее исключение WCF:

Введите «System.IO.FileStream» с именем контракта с данными   'FileStream: http: //schemas.datacontract.org/2004/07/System.IO' не является   Ожидается,

Исследуя это, я читал, что потоки не могут быть сериализованы, однако, конечно, это должно быть неправильно для первого примера работы? Можно ли использовать FileStream с DataContract, или мне не нужно даже пытаться использовать этот подход?

0
nl ja de

1 ответы

DataContract messages serialize in a different way than MessageContract messages. Having a Stream member (thus allowing streaming) must be done using MessageContract, wcf then understands it is inteded for streaming and does not try to perform standard serialization.

См. http://msdn.microsoft.com/en-us/library/ms733742. aspx для получения дополнительной информации:

Вы не должны использовать типы, основанные на System.IO.Stream, внутри данных   контракты. Данные потока должны передаваться с использованием потоковой передачи   модель, описанная в разделе «потоковые данные».

4
добавлено
Отличное спасибо. Я неправильно предположил, что WCF будет применять правильные механизмы связи на основе типов объектов, используемых в службе.
добавлено автор EvilDr, источник
DotNetRuChat
DotNetRuChat
2 992 участник(ов)

Чат русскоязычного .NET сообщества http://dotnet.ru/ Вам могут быть интересны: @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @xamarin_russia, @microsoftstackjobs, @uwp_ru Флуд в @dotnettalks

Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

pro.net
pro.net
710 участник(ов)

Обсуждение .NET Framework и всего, что с ним связано. Правила: не флудить не по теме, уважать ваших коллег и никакой рекламы (объявления о вакансиях можно согласовать с @AlexFails). Флудилка: @dotnettalks Участник @proDOT

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

.NET Talks: Force Push Masters
.NET Talks: Force Push Masters
490 участник(ов)

Свободный чат .NET разработчиков. Правила: t.me/dotnettalks/56823 Вам могут быть интересны: @dotnetruchat, @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @dotnetgroup, @xamarin_russia, @microsoftstackjobs, @uwp_ru http://combot.org/chat/-1001128250813

.NET Chat Убежище
.NET Chat Убежище
246 участник(ов)

Чат .NET разработчиков под эгидой MSK/SPB .NET Community Group Вам могут быть интересны: @fsharp_chat, @dotnetruchat, @cilchat, @xamarin_russia, @microsoftstackjobs, @dotnetgroup Флуд в @dotnettalks

.NET CIL Chat
.NET CIL Chat
54 участник(ов)

.NET CIL (aka IL aka MSIL)