• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

skcratch

[Resolvido] - Armazenar registos resultantes de invocação WebService

5 mensagens neste tópico

Viva!

Neste momento, estou a desenvolver uma aplicação que recorre a WebServices para obter informação externa. Depois de fazer o parsing do XML retornado pela invocação do WebService, utilizo as propriedades a seguir apresentadas da classe DataSet para "mapear" o XML numa classe DataTable:

DataSet ds1 = new DataSet();
ds1.ReadXml(new StringReader(xmlDoc.OuterXml));
DataTable dt1 = new DataTable();
dt1 = ds1.Tables["Tabela"];

Alguns dos pedidos realizados, podem retornar mais do que um registo (falando em termos de Rows da DataTable) mas apenas pretendo apresentar a informação relativa a um único registo de cada vez. No entanto, o utilizador pode pedir o registo seguinte (caso exista) e é aí que reside a minha dúvida:  como posso armazenar a informação obtida no primeiro pedido (retorna todos os registos) para assim não ter que efectuar um novo pedido ao servidor de WebServices? De salientar que não estou a utilizar controlos de DataBinding para apresentar a informação.

Grato desde já pela ajuda,

Cumps!

:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

podes adicionar linhas a uma datatable, cada vez q recebes um registo adicionas esse registo a uma datatable.

Assim no fim tens todos os registos na mm datatable.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva!

Sim, já tinha pensado numa solução semelhante. No entanto, depois dos dados terem sido enviados para o cliente, segundo sei, o garbage collector liberta todos os recursos reservados dinamicamente. Sendo assim, caso pretende-se obter o próximo registo da DataTable através de um Web Control que gerasse um postback (por exemplo, ASP Button), isso não seria possível, já que os dados não estariam em memória.

Estou enganado?

Cumps!

:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Queres guardar a DataTable e mostrar no cliente um registo de cada vez, e só mostrar o proximo se for feito um postback, é isso?

Se for esse o caso podes fazer um dos seguintes:

- Guardar a DataTable em Viewstate, se a DT for mto grande o carregamento da página fica mais lento.

- Guardar a DataTable em Sessão, se a DT for mto grande e tiveres mta gente a aceder ao mm tempo arriscas-te a esgotar a memória ao servidor.

- Guardar a DataTable em Cache, este caso deves usar se a DT for igual para todos os utilizadores.

- Ir á bd buscar registo a registo e não guardar DataTable, este caso deves usar qd o tamanho da DataTable for demasiado grande para os 2 primeiros casos, no entanto ainda podes recorrer á paginação.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva!

Já encontrei uma solução para o problema; peço desculpa pela resposta tardia. Depois de analisado o caso, foi concluído o número de registos nunca seria muito grande, tendo por base uma análise comparativa com as restantes componentes da aplicação. Sendo assim, optei por enviar todos os registos para o cliente (browser) e controlar ai a sua visibilidade, apenas mostrando um registo de cada vez.

Grato desde já pela ajuda,

Cumps!

:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora