Pergunta

Eu quero registros de importação de arquivo CSV para o DB do Silverlight extremidade dianteira. Eu estou usando o serviço WCF para realizar as operações de banco de dados. Quando eu passar todo o caminho de arquivo (codificado), eu sou capaz de adicionar registros para a DB, mas como OpenFileDialog no Silverlight não permite obter (devido a razões de segurança) do caminho do arquivo, eu tentei usar o serviço WCF e passagem quer a propriedade FileInfo ou StreamReader e, em seguida, realizar as operações. Mas a sua me dando uma exceção. Eu tenho o seguinte código -

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

'arquivo Service1.svc.vb

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

Estou recebendo uma exceção - O servidor remoto retornou um erro: NotFound (no método 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) Passando FileInfo

arquivo Page.xaml.vb

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

arquivo Service1.svc.vb

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

Estou recebendo uma exceção no método BeginInvoke - tentativa de acessar o método falhou: System.IO.FileSystemInfo.get_Attributes ()

Alguém por favor pode me ajudar / sugerir solução ou uma melhor abordagem para registros de importação de CSV para o programático DB usando o Silverlight.

Obrigado!

Foi útil?

Solução

Nem FileInfo nem StreamReader são classes serializáveis, então você não pode realmente enviá-los diretamente para o servidor com WCF. Uma opção é ler o arquivo na memória, em seguida, passá-lo para o serviço, algo como mostrado abaixo. Outra opção é ler o arquivo .csv em várias linhas (lista) e passá-lo para o serviço.

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())
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top