none
Retornar Arquivo através de WebService RRS feed

  • Pergunta

  • Ola galera, estou desenvolvendo um projeto movel com aplicações moveis e webservices, basicamente é troca de informações dos dois lados, mas geralmente são muitas as informações. Inicialmente montei o WebService retornando um dataset, pois é a forma mais simples, como vir em varios posts não é a forma recomendada, então passei a pegar os dados do dataset, gerar um arquivo xml e retonar em forma de string, blz, melhorou, mas percebi que ainda continua grande o trafego então gostaria de saber como pegar esse arquivo, compactar e enviar via webservice, tem q ser via webservice, pois preciso ler do outro lado e retonar dados referente aos dados enviados, dessa forma ele gera outro arquivo de retorno.

    Desde ja agradeço.

    Alessandro .NET Planet

    quarta-feira, 18 de junho de 2008 13:13

Todas as Respostas

  • quarta-feira, 18 de junho de 2008 13:26
  • E ai blz...

    Ele sera utilizado em projeto de Força de Venda, ou seja, retornara dados de clientes, produtos, etc aos representantes que usarão o Movel e receberá Pedidos, Mensagens, etc que esses representantes fizerem...

    Ja adiantando desde que postei ja consegui compactar o arquivo e agora estou testando o webservice retornando o FileStream que seria esse arquivo compactado... ainda estou testando...

    Valew...

     

    quarta-feira, 18 de junho de 2008 14:56
  • Experimente utilizar MTOM. é 100% compatível com todos os recursos de WS com .net

    MTOM compacta qualquer binario na msg SOAP, basta abilitar WSE 3.0

     

    WSE 3.0 vc pode baixar em : http://www.microsoft.com/downloads/details.aspx?FamilyID=018a09fd-3a74-43c5-8ec1-8d789091255d&displaylang=en

     

    WSE 3.0 oference vários recursos extras para utilizar com os web services.

     

    sexta-feira, 25 de julho de 2008 18:29
  • Ae galera montei as rotinas transformando o xml em um array de byte e compactando atravez da classe do .net

    GZipStream e esta muito bom, depois se alguem desejar posso postar o codigo por completo...

    Valew....

    Alessandro Lopes - .NET Planet (Fernandopolis-SP)

    sexta-feira, 5 de setembro de 2008 19:30
  •  AlessandroLopes wrote:
    Ae galera montei as rotinas transformando o xml em um array de byte e compactando atravez da classe do .net

    GZipStream e esta muito bom, depois se alguem desejar posso postar o codigo por completo...

    Valew....

    Alessandro Lopes - .NET Planet (Fernandopolis-SP)



    Poderia enviar para o meu email....? ou disponibilizar aqui para que todos possam utilizar.

    Aproveitando o tópico vou descrever algo q está acontecendo.



    Alessandro ,

    Tenho uma aplicação móvel consumindo um webservice.

    Atualmente a situação é a seguinte.

    Na aplicação móvel envio uma solicitação ao webservice passando através de parametros as tabelas que desejo atualizar.

    No dispositivo móvel utilizo SQL SERVER CE.

    O  webservice, processa a requisição e gera um arquivo SDF, este arquivo eh transmidito via http e/ou ftp para o dispositivo.

    Porém hoje me ocorreu uma situação conturbada.

    O arquivo gerado no webservice está tudo ok, com todos os dados corretos e funcionais.


    Eis aqui o problema.


    Na transferência do arquivo para o dispositivo ele perde informaçoes de uma unica tabela.

    E por incrível que pareça de um determinado mes (07) para ca.

    Se eu pegar o endereço do arquivo colocar no IE e baixar o arquivo colocar no seu local original no dispositivo funciona perfeitamente....

    Possivelmente o problema esta no código abaixo.

    Lembrando que antes de copiar o novo arquivo para o dispositivo eu deleto o anterior...


    Private Sub DownloadFile()
            Dim request As HttpWebRequest = Nothing
            Dim response As WebResponse = Nothing
            Dim stream As Stream = Nothing
            Dim fs As FileStream = Nothing
            Dim urlFile As String = "http://xxxxxxxxxxxxx/down/" & usuario & ".sdf"

            Try
                request = DirectCast(WebRequest.Create(urlFile), HttpWebRequest)
                request.KeepAlive = False
                response = request.GetResponse()
                stream = response.GetResponseStream()

                Dim localFilePath As String = "\Program Files\BsControlMobile\" & usuario & ".SDF"

                File.Delete(localFilePath)
                fs = New FileStream(localFilePath, FileMode.CreateNew, FileAccess.Write)

                Dim total As Integer = 0
                Dim buffer As Byte() = New Byte(4095) {}

                While True
                    Dim currentRead As Integer = stream.Read(buffer, 0, buffer.Length)
                    total += currentRead
                    fs.Write(buffer, 0, currentRead)

                    If currentRead = 0 Then
                        Exit While
                    End If
                End While
            Finally
                fs.Close()
                response.Close()
                request.Abort()
                MsgBox("Não foi possível fazer o download do arquivo " & usuario & ".sdf", MsgBoxStyle.Critical)
            End Try
        End Sub
    domingo, 28 de setembro de 2008 21:54
  • E Admilson, blz.
    Sobre o seu problema, primeiramente não delete o arquivo antigo do banco de dados, senão, se haver algum problema, ficara sem o mesmo, ja que foi deletado e nao tem a certeza do outro baixado. Para isso renomei, e faz um tratamento posterior para deleção.
    Quanto ao problema de uma tabela nao vir os dados de um periodo para ca, isso com certeza, são os dados que estão vindo nela, verifique se não existem campos decimais com grandes quantidades de casas decimais, ja aconteceu comigo, nao dessa forma, mas se vc nao fizer o tratamento de numero de casas decimais, pode causar uma excessão e somente determinada tabela nao popular.
    Sobre o GZipStream, segue os links onde obtive as informações:
    http://forums.microsoft.com/msdn-br/ShowPost.aspx?PostID=747683&SiteID=21


    Falow....
    Alessandro Lopes - .NETPlanet
    segunda-feira, 29 de setembro de 2008 11:23
  • Alessandro, Boa noite

    Primeiramente gostaria de agradecer por sua resposta rápida.

    Bem, com relação ao meu problema , não acredito que seja casas decimais não, pelo simples fato de :

    O arquivo é gerado pelo webservice e colocado em determinda pasta para download.

    Se eu pegar esse mesmo arquivo que foi recentemente gerado pelo WS e que esta na pasta download, e através do INTERNET EXPLORE do POCKET PC fazer o download do arquivo e coloca-lo em seu local original no pocket, funciona tudo maravilhosamente bem. Ou seja, o arquivo gerado não possue problemas com relação a campos decimais.

    Porém se eu fizer o download do mesmo arquivo, através da função acima, ele não traz todos os dados.....

    Para se ter uma idéia, a tabela que esta apresentanto o problema tem 676 registros (quando baixado via função) e originalmente a mesma tabela possue 1164 registros , sendo a mesma em seu local original ou baixada via IE MOBILE.

    Não entendo o porque que o banco qdo baixada via função perde dados e qdo baixado via IE MOBILE apresenta-se normal.




    terça-feira, 30 de setembro de 2008 00:01
  • Olá Alessandro.

    Estou com dificildades em com compactação em .net.

    Se for possível manda pra mim um exemplo de como compactar dados com webservice.

    Ficarei muito grato.

    Meu e-mail. robmunhoz@gmail.com

     

    terça-feira, 2 de dezembro de 2008 10:10