136 messaggi dal 15 febbraio 2009
Buongiorno.

Ho realizzato a parte una barra animata con Silverlight.

Poichè viene inclusa in diverse pagine/diversi controlli, ho pensato di non includerla separatamente in tutti gli xap, scaricandola dinamicamente al caricamento della pagina, utilizzando un WebClient.

Prima di tutto, ho realizzato una semplice pagina di test in cui ho inserito un bottone; il gestore dell'evento Click si occupa poi di istanziare il WebClient ed eseguire tutte le operazioni.

Ecco il codice:
private string _base = "http://www.miodominio.net/navigazione.xap";

...
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            WebClient selClient = new WebClient();
            selClient.OpenReadCompleted += new OpenReadCompletedEventHandler(selClient_OpenReadCompleted);
            navigateUri = new Uri(_base4, UriKind.Absolute);
            selClient.OpenReadAsync(navigateUri);
        }

        void selClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs args)
        {

                StreamResourceInfo _sri = new StreamResourceInfo(args.Result, null);

...
        }



Questo codice, inevitabilmente, solleva una TargetInvocationException nel momento in cui istanzio il primo StreamResourceInfo.
In pratica, lo scaricamento dello xap avviene correttamente, ma non mi riesce di aprire lo Stream.

Non capisco esattamente in che punto si verifichi il problema.
Visto che comunque la barra di navigazione è molto leggera(e dev'essere sempre disponibile da subito), non ci sarebbero problemi a inserirla direttamente nello xap originale, a costo di qualche Mb occupato in più sull'hard-disk del server.
Ma vorrei riuscire a capire la natura di questo problema.

Mi sembra di aver notato(non ho ancora fatto verifiche approfondite, comunque) che questo problema si verifica spesso quando uso un controllo Silverlight IN UNA PAGINA HTML DI PROVA(cioè non preventivamente inserito in un progetto web), senza Web Server, e cerco di accedere a una risorsa remota.
Potrebbe essere?
TheCat wrote:
Buongiorno.

Ho realizzato a parte una barra animata con Silverlight.

Poichè viene inclusa in diverse pagine/diversi controlli, ho pensato di non includerla separatamente in tutti gli xap, scaricandola dinamicamente al caricamento della pagina, utilizzando un WebClient.
Prima di tutto, ho realizzato una semplice pagina di test in cui ho inserito un bottone; il gestore dell'evento Click si occupa poi di istanziare il WebClient ed eseguire tutte le operazioni.

Ecco il codice:

private string _base = "http://www.miodominio.net/navigazione.xap";
...
private void Button_Click(object sender, RoutedEventArgs e) {
WebClient selClient = new WebClient();
selClient.OpenReadCompleted += new
OpenReadCompletedEventHandler(selClient_OpenReadCompleted); navigateUri = new Uri(_base4, UriKind.Absolute);
selClient.OpenReadAsync(navigateUri);
}

void selClient_OpenReadCompleted(object sender,
OpenReadCompletedEventArgs args)
{

StreamResourceInfo _sri = new
StreamResourceInfo(args.Result, null);

...
}



Questo codice, inevitabilmente, solleva una TargetInvocationException nel momento in cui istanzio il primo StreamResourceInfo.
In pratica, lo scaricamento dello xap avviene correttamente, ma non mi riesce di aprire lo Stream.
Ciao,
potrebbe essere un problema di path, controlla lo stack completo dell'eccezione.

Alessio Leoncini (SilverlightItalia.com)
.NET Developer, Interactive Designer, UX Specialist, Trainer @ 5DLabs.it
136 messaggi dal 15 febbraio 2009
per path intendi, il percorso esatto del file xap?
Escludo.

Anche se non l'ho scritto, ho già controllato inserendo un nuovo Button, a cui ho associato questo gestore:

private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            navigateUri = new Uri(_base4, UriKind.Absolute);
            HtmlPage.Window.Navigate(navigateUri);
        }


che funziona senza problemi. Notare che la Uri è esattamente la stessa, solo che con HtmlPage.Window.Navigate() funziona, con il metodo di callback di WebClient.OpenReadCompleted no.

Tra un attimo farò un po' di test approfonditi.
Intanto, vorrei chiedere a qualcuno già esperto, non potrebbe essere un problema di IIS, cioè del server?
C'è questa possibilità?
TheCat wrote:
per path intendi, il percorso esatto del file xap?
Escludo.
Cosa contiene lo stack?

Se il path è scorretto ottieni un:
System.Reflection.TargetInvocationException was unhandled by user code Message="An exception occurred during the operation, making the result invalid. Check InnerException for exception details."
StackTrace:
at
System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary() at System.Net.OpenReadCompletedEventArgs.get_Result() at SilverlightApplication3.Page.<.ctor>b__0(Object o, OpenReadCompletedEventArgs e)
at
System.Net.WebClient.OnOpenReadCompleted(OpenReadCompletedEventArgs e) at System.Net.WebClient.OpenReadOperationCompleted(Object arg) InnerException: System.Net.WebException
Message="The remote server returned an error: NotFound"
Se invece il file si trova su un dominio esterno al sito, e non è presente il file clientaccesspolicy.xml opportunamente configurato, puoi ottenere questo:

System.Reflection.TargetInvocationException was unhandled by user code Message="An exception occurred during the operation, making the result invalid. Check InnerException for exception details."
StackTrace:
at
System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary() at System.Net.OpenReadCompletedEventArgs.get_Result() at SilverlightApplication3.Page.<.ctor>b__0(Object o, OpenReadCompletedEventArgs e)
at
System.Net.WebClient.OnOpenReadCompleted(OpenReadCompletedEventArgs e) at System.Net.WebClient.OpenReadOperationCompleted(Object arg) InnerException: System.Security.SecurityException
Message=""

Intanto, vorrei chiedere a qualcuno già esperto, non potrebbe essere un problema di IIS, cioè del server?
Ho diversi siti che adottano questa soluzione online su diversi server, e non ho mai incontrato questi problemi se non nei casi che ti ho descritto

Alessio Leoncini (SilverlightItalia.com)
.NET Developer, Interactive Designer, UX Specialist, Trainer @ 5DLabs.it
136 messaggi dal 15 febbraio 2009
Dopo due giorni(festivi) di lavoro, mi sembra corretto informare chi mi ha aiutato sullo status del problema.

Ho risolto subito, in effetti la InnerException riportava il sollevamento di una System.SecurityException.

Il problema, però, si verificava soltanto mentre testavo "in locale" l'applicazione, prima di averla deployata sul server remoto.

Una volta caricata, funzionava senza bisogno di modifiche.

La causa era un file crossdomain.xml modificato nel modo sbagliato.
TheCat wrote:
Dopo due giorni(festivi) di lavoro, mi sembra corretto informare chi mi ha aiutato sullo status del problema.

Ho risolto subito, in effetti la InnerException riportava il sollevamento di una System.SecurityException.

Il problema, però, si verificava soltanto mentre testavo "in locale" l'applicazione, prima di averla deployata sul server remoto.
Una volta caricata, funzionava senza bisogno di modifiche.

La causa era un file crossdomain.xml modificato nel modo sbagliato.
Ottimo  , cioè, non che tu abbia lavorato di domenica, ma che abbia risolto

Alessio Leoncini (SilverlightItalia.com)
.NET Developer, Interactive Designer, UX Specialist, Trainer @ 5DLabs.it

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.