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!

Était-ce utile?

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())
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top