locked
Intercettare gli errori lato server RRS feed

  • Domanda

  • buon giorno a tutti,

    come si fa ed intercettare gli errori causati lato server del servizio web?
    Nei miei classici servizi wcf usavo una mia classe che facevo ritornare al client nel seguente modo
    catch (Exception ex)
    {
        throw new FaultException<MiaErrorClass>(new MiaErrorClass(ex.Message));
    }

    dopo aver marcato il metodo nel seguente modo
    [OperationContract()]
    [FaultContractAttribute(typeof(MiaErrorClass))]
    Pippo GetPippo();

    Lato client intercettavo l'errore così
    catch (FaultException<MiaErrorClass> ex)
    {
    }

    Ora su silverlight non entra nel catch specifico.
    Come posso far tornare l'errore esatto generato lato Server al client così che io possa loggarlo?

    un ringraziamento anticipato a tutti
    giovedì 4 marzo 2010 13:58

Risposte

Tutte le risposte

  • Devi fare in modo che l'infrastruttura di Silverlight sia in grado di propagare l'eccezione (cosa che normalmente non accade)
    Dai un occhiata a questi posts:
    http://blogs.ugidotnet.org/corrado/archive/2009/05/22/silverlight3-exception-propagation.aspx
    http://blogs.ugidotnet.org/corrado/archive/2009/08/18/exception-propagation-in-silverlight3-revised.aspx

    Corrado Cavalli [Microsoft .NET MVP-MCP]
    UGIdotNET - http://www.ugidotnet.org
    Weblog: http://blogs.ugidotnet.org/corrado/
    Twitter: http://twitter.com/corcav
    giovedì 4 marzo 2010 16:28
    Postatore
  • Anzitutto grazie per la risposta,

    la seconda soluzione proposta è molto interessante
    bool registerResult = WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);

    il problema è che io faccio una login su una pagina .aspx (con security Forms) e poi eseguo la redirect sulla pagina contenete l'applicazione silverlight.
    Con questa riga di codice la classe proxy smette di funzionare perchè alla prima richiesta che faccio al servizio, il reference "sbatte" contro il web.config dove è impostata la redirect alla pagina di login nel momento in cui non si dispone del cookie di autenticazione che ovviamente è stato salvato lato client.

    spero di essermi spiegato correttamente.....
    posso aggiornare il reference solo quando non imposto <deny users="?"/>
    • Proposto come risposta acarum venerdì 5 marzo 2010 11:56
    • Proposta come risposta annullata Andrea Boschin [MVP] venerdì 5 marzo 2010 13:36
    venerdì 5 marzo 2010 11:19
  • Ciao,

    quindi , se ho capito bene, con questa tecnica il  cookie di autenticazione non viene passato dal lato client (ie or firefox per esempio ) al lato server, per eventuali verifiche del caso?

    Grazie

    Luca
    venerdì 5 marzo 2010 11:58
  • Ciao,

    il cookie non passa di sicuro e con questo tipo di autenticazione non è possibile aggiornare il reference al servizio che crea il proxy.
    Questo mi poteva star bene fino a quando non ho usato la riga suggerita
    bool registerResult = WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);

    abilitavo <deny users="?"/> solo in fase di rilascio, ma adesso ciò non va bene, quindi o non la uso (ma gli errori lato server non li intercetto più a causa dell'errore 500) o faccio una login lato silverlight (qualcuno ho un link dove trovare un esempio?)

    Avete altre soluzioni?

    Grazie
    venerdì 5 marzo 2010 12:44
  • Purtroppo il ClientHttpStack non supporta la FormsAuthentication. Quindi nel tuo caso non puoi configurare il sistema come tale.

    Ciao.
    Andrea Boschin
    Most Valuable Professional - Silverlight
    web: http://www.silverlightplayground.org
    blog: http://blog.boschin.it
    twitter: http://twitter.com/aboschin
    venerdì 5 marzo 2010 13:40
  • Ciao


    non so proprio come affrontare una login lato silverlight.
    C'è un esempio di login da vedere che non usi SqlServer come db?

    Grazie molte
    venerdì 5 marzo 2010 14:06
  • per favore benedite corrado cavalli subito!!!!!

    mercoledì 17 marzo 2010 19:25