1

Silverlight フロントエンドから csv ファイルのレコードを DB にインポートしたいと考えています。DB操作を実行するためにWCFサービスを使用しています。ファイル パス全体 (ハード コード) を渡すと、DB にレコードを追加できますが、Silverlight の OpenFileDialog では (セキュリティ上の理由により) ファイル パスを取得できないため、WCF サービスを使用して渡してみました。 FileInfo プロパティまたは StreamReader のいずれかを取得してから、操作を実行します。しかし、それは私に例外を与えています。私は次のコードを持っています -

1) StreamReader 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)

'Service1.svc.vb ファイル

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

例外が発生しました - リモート サーバーがエラーを返しました: NotFound (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) FileInfo を渡す

Page.xaml.vb ファイル

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

Service1.svc.vb ファイル

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

BeginInvoke メソッドで例外が発生しました - メソッドにアクセスしようとして失敗しました: System.IO.FileSystemInfo.get_Attributes()

Silverlightを使用してcsvからDBプログラムにレコードをインポートするための解決策またはより良いアプローチを提案/提案してください。

ありがとう!

4

1 に答える 1

0

FileInfo も StreamReader もシリアライズ可能なクラスではないため、WCF を使用して直接サーバーに渡すことはできません。オプションは、以下に示すように、メモリ内のファイルを読み取り、それをサービスに渡すことです。もう 1 つのオプションは、.csv ファイルを複数行 (リスト) で読み取り、それをサービスに渡すことです。

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())
于 2009-12-01T23:50:31.507 に答える