Domanda

Lo scenario: Ho un'applicazione PRISM sviluppato in Silverlight (4), e sto usando un'applicazione lato server ASP.NET per ospitare diversi web-services (che, a sua volta, accede WCF-servizi, ma che non è veramente importante qui). L'applicazione Silverlight deve essere in grado di chiamare i servizi di web-attraversare dominio (il che significa che i servizi web non è necessariamente sullo stesso server che ospita l'applicazione Silverlight).

L'applicazione Silverlight è costituito da diversi moduli, ciascuno l'accesso ai servizi web ASP.NET.

Non ho molta esperienza con Silverlight e PRISM, ma per quanto posso vedere, non si tratta di uno scenario molto particolare ...

Il problema: La mia sfida è, che quando 2 moduli differenti accedere ai servizi web, ottengo 2 nuove sessioni sul web-server. Avrei pensato che, poiché entrambi i moduli vivono nella stessa pagina HTML (e quindi anche nella stessa sessione del browser), si otterrebbe la stessa sessione sul web-server ...?

Ho cercato di rendere il servizio web proxy-client a livello mondiale disponibili nel contenitore (con Unity), registrando un'istanza (utilizzando Container.RegisterInstance), e quindi ottenere questo caso ogni volta che un modulo ha bisogno di fare un web- chiamata di servizio (utilizzando Container.Resolve), ma questo non sembra aiutare.

Tuttavia, tutte le chiamate effettuate all'interno dello stesso modulo ottiene sempre la stessa sessione sul server.

Qualcuno può vedere che cosa mi manca qui ...?

Grazie!

Jon

È stato utile?

Soluzione

Sembra che ho trovato la mia risposta.

Il problema era che la mia domanda sparava più chiamate web-service su startup (le diverse PRISM-moduli che lavorano in modo indipendente). E quando diverse chiamate sono state fatte prima di tutte le risposte è stato dato dal web-server, nessuna sessione (e quindi è stato fornito alcun cookie "ASP.NET_SessionId") al client prima che le chiamate successive sono state fatte.

La mia soluzione era quella di assicurarsi che io make una di chiamata (asincrona come sempre), ad esempio per un semplice ping-come web-service, quindi tenere tutte le altre chiamate al web-server fino a questo la risposta è tornato. Poi, tutte le chiamate successive hanno la stessa sessione sul server (perché ora tutti contengono il cookie "ASP.NET_SessionId" nell'intestazione).

In pratica, questa chiamata è fatta dal PRISM-shell, e nessun moduli sono beeing caricato prima di ricevere il reponse. Poi io sono assolutamente sicuro che nessuno degli altri moduli ottenere grilletto facile prima di avere una sessione di stato a portata di mano.

Ancora, se qualcuno vede altri problemi con questa soluzione, io sono più che felice di sentire da voi.

Grazie!

Jon

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top