Passez StreamReader au service WCF de Async Call Silverlight
-
11-09-2019 - |
Question
Je veux importer des enregistrements à partir du fichier csv à la DB d'extrémité avant Silverlight. J'utilise le service WCF pour effectuer les opérations DB. Quand je passe le chemin du fichier (codé en dur), je suis en mesure d'ajouter des enregistrements à la DB, mais comme OpenFileDialog dans Silverlight ne permet pas d'obtenir (en raison des raisons de sécurité) du chemin du fichier, j'ai essayé d'utiliser le service WCF et laissez-passer soit la propriété FileInfo ou StreamReader puis effectuez les opérations. Mais sa me donner une exception. J'ai le code suivant -
1) Passe StreamReader fichier Page.xaml.vb
Dim service As New ServiceReference1.Service1Client
dlg.ShowDialog()
Dim Reader As System.IO.StreamReader
If dlg.File IsNot Nothing Then
Reader = dlg.File.OpenText
End If
service.ImportPersonInfoAsync(Reader)
'fichier Service1.svc.vb
<OperationContract()> _
Public Sub ImportPersonInfo(ByVal Reader As System.IO.StreamReader)
'Code to add records to DB table
End Sub
Je reçois une exception - Le serveur distant a renvoyé une erreur: NotFound (dans la méthode EndInvoke)
Public Sub EndImportPersonInfo(ByVal result As System.IAsyncResult) Implements ServiceReference1.Service1.EndImportPersonInfo
Dim _args((0) - 1) As Object
MyBase.EndInvoke("ImportPersonInfo", _args, result)
End Sub
2) Passe FileInfo
fichier Page.xaml.vb
If dlg.File IsNot Nothing Then
ImportFile = dlg.File
End If
service.ImportPersonInfoAsync(ImportFile)
fichier Service1.svc.vb
Public Sub ImportPersonInfo(ByVal ImportFile As System.IO.FileInfo)
Dim Reader As System.IO.StreamReader = ImportFile.OpenText
'Do operation
End Sub
Je reçois une exception dans la méthode BeginInvoke - Tentative d'accès à la méthode a échoué: System.IO.FileSystemInfo.get_Attributes ()
Quelqu'un peut-il s'il vous plaît aidez-moi / suggérer solution ou une meilleure approche pour importer des enregistrements de csv dans la base de données de programmation en utilisant Silverlight.
Merci!
La solution
Ni FileInfo ni StreamReader sont des classes sérialisables, de sorte que vous ne pouvez pas les passer vraiment directement au serveur avec WCF. Une option est de lire le fichier en mémoire, puis le transmettre au service, quelque chose comme illustré ci-dessous. Une autre option est de lire le fichier .csv dans plusieurs lignes (liste) et le transmettre au service.
Dim service As New ServiceReference1.Service1
Clientdlg.ShowDialog()
Dim ms As System.IO.MemoryStream
If dlg.File IsNot Nothing Then
Dim TheFile as Stream = dlg.File.OpenRead()
Dim Buffer as Byte() = New Byte(10000) { }
Dim BytesRead as Integer
Do
BytesRead = TheFile.Read(Buffer, 0, Buffer.Length)
ms.Write(Buffer, 0, BytesRead)
Loop While (BytesRead > 0)
End If
TextEnd Ifservice.ImportPersonInfoAsync(ms.ToArray())