6 messaggi dal 06 aprile 2004
Salve a tutti,

ho iniziato a fare qualche prova con Windows Phone un pò alla cieca, consapevole che dovrò da subito mettermi a studiare...dopo qualche piccolo successo mi sono arenato con un discorso di "cache"...è soltanto a questo punto un discorso di curiosità, dato che non riesco ad individuare il problema.

Ho provato a creare un'APP con una pagina che mi permettesse di recuperare dei dati JSON da un URL. Funziona tutto bene e posso recuperare e gestire questi dati nella pagina.

L'URL in questione, appartiene ad un e-commerce: fornendo nella chiamata i parametri di un articolo, lo aggiunge al carrello e restituisce il totale della merce nel carrello stesso.

Se faccio la stessa cosa da un browser, il carrello viene incrementato finchè non chiudo la sessione. A quel punto, facendo una nuova chiamata, riparte da zero.

Nella App di Windows Phone, anche chiudendola o riavviando lo smartphone il carrello continua ad aumentare.

Ho provato anche con:

this.NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Disabled;

oppure qualcosa tipo:

private void ResetPageCache()
{
var cacheSize = ((Frame)Parent).CacheSize;
((Frame)Parent).CacheSize = 0;
((Frame)Parent).CacheSize = cacheSize;
}

...niente da fare.
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
a naso direi che non si tratta di un problema di cache; ma potrebbe essere una questione legata ai cookie di sessione. Tuttavia mi mancano parecchi elementi per essere sicuro che sia questa la causa.

Avrei bisogno di sapere:
  • Come invii le chiamate all'URL, usi HttpClient? Posta il codice che usi;
  • Lato server, come mantieni lo stato del carrello? Lo metti in una variabile di Sessione? Oppure lo scrivi nel database?
  • L'utente deve essere obbligatoriamente loggato per poter usare il carrello oppure può aggiungere articoli anche da utente anonimo?


ciao,
Moreno

Enjoy learning and just keep making
6 messaggi dal 06 aprile 2004
Ciao Moreno,

grazie per la risposta.

Come invii le chiamate all'URL, usi HttpClient? Posta il codice che usi;
Si, ho usato HttpClient:

var uri = new Uri("......URL......");
var httpClient = new Windows.Web.Http.HttpClient();

try
{
result = await httpClient.GetStringAsync(uri);
}
catch
.............

DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Risposta));
MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(result));

Risposta risp = new Risposta();
risp=(Risposta)ser.ReadObject(stream);
....................


Lato server, come mantieni lo stato del carrello? Lo metti in una variabile di Sessione? Oppure lo scrivi nel database?
Sessione

L'utente deve essere obbligatoriamente loggato per poter usare il carrello oppure può aggiungere articoli anche da utente anonimo?
Può essere anonimo

Grazie ancora!!

Daniele
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Daniele,
non riesco ad identificare la causa del problema.
Normalmente, il carrello non può continuare ad aumentare; infatti, è sufficiente che l'utente chiuda il browser (l'app, in questo caso) affinché il cookie di sessione emesso da ASP.NET venga automaticamente cancellato.
Alla riapertura, il cookie non esiste più ed ASP.NET non può far altro che generare una nuova sessione, il che comporta anche la perdita dei dati che erano presenti nel carrello.

Bisogna fare qualche indagine in più.
Quando invii una richiesta con l'HttpClient, usa un uri che includa anche un valore generato casualmente, come ad esempio:
var uri = new Uri("http://tuosito.it/percorso?random=" + Guid.NewGuid().ToString());

Questo ci servirà ad escludere definitivamente problemi di cache.

Inoltre, prova a creare tu il cookie container da usare con l'HttpClient.
string risposta;

var cookieContainer = new CookieContainer();
var uri = new Uri("http://tuosito.it/percorso?random=" + Guid.NewGuid().ToString());
using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer })
{
  using (var client = new HttpClient(handler))
  {
    risposta = client.GetStringAsync(uri).Result;
  }
}


ciao,
Moreno
Modificato da BrightSoul il 01 marzo 2016 22.05 -

Enjoy learning and just keep making
6 messaggi dal 06 aprile 2004
Ciao Moreno,

ho appena provato a creare il cookie container come da tuo suggerimento e funziona perfettamente. E' una prassi necessaria su Win Phone o è qualcosa che deriva da questo caso particolare (magari da qualche mio errore...)?

In teoria dovrò lavorare nelle prossime settimane su questo progetto...se dovessi scoprire qualcosa in più aggiorno il thread.

Nel frattempo ti ringrazio per l'aiuto.

A presto!

Daniele

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.