Frage

Ich möchte von Silverlight-Frontend der DB Datensätze aus CSV-Datei importieren. Ich bin mit WCF-Dienst, um die DB-Operationen auszuführen. Wenn ich die gesamte Dateipfad (hart codiert) passieren, bin ich in der Lage Datensätze an die DB hinzuzufügen, aber als Openfile in Silverlight erlaubt es nicht, den Dateipfad des (aus Sicherheitsgründen) zu erhalten, habe ich versucht, WCF-Dienst und den Ball mit entweder die Fileinfo-Eigenschaft oder Stream und führen Sie dann die Operationen. Aber sein gibt mir eine Ausnahme. Ich habe den folgenden Code -

1) Passing Stream Page.xaml.vb Datei

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)

'Service1.svc.vb Datei

<OperationContract()> _
    Public Sub ImportPersonInfo(ByVal Reader As System.IO.StreamReader)
    'Code to add records to DB table
    End Sub

Ich erhalte eine Ausnahme - Der Remoteserver hat einen Fehler zurückgegeben: NotFound (in EndInvoke Methode)

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) Passing Fileinfo

Page.xaml.vb Datei

If dlg.File IsNot Nothing Then
   ImportFile = dlg.File
End If
service.ImportPersonInfoAsync(ImportFile)

Service1.svc.vb Datei

Public Sub ImportPersonInfo(ByVal ImportFile As System.IO.FileInfo)
    Dim Reader As System.IO.StreamReader = ImportFile.OpenText
    'Do operation
End Sub

Ich erhalte eine Ausnahme in BeginInvoke-Methode - Versuch, die Methode für den Zugriff fehlgeschlagen: System.IO.FileSystemInfo.get_Attributes ()

Kann mir jemand bitte helfen Sie mir / vorschlagen Lösung oder einen besseren Ansatz Datensätze aus csv in den DB programmatisch mit Silverlight zu importieren.

Danke!

War es hilfreich?

Lösung

Weder noch Fileinfo Stream sind serialisierbar Klassen, so können sie wirklich nicht direkt mit WCF an den Server übergeben. Eine Option ist die Datei im Speicher zu lesen, es dann an den Dienst übergeben, so etwas wie unten gezeigt. Eine weitere Option ist die CSV-Datei in mehreren Zeilen lesen (List) und übergibt es an den 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())
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top