У меня есть очень простой сервис 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, или мне не нужно даже пытаться использовать этот подход?