2010-05-05 42 views
1

場景: 我有一個在Silverlight(4)中開發的PRISM應用程序,並且我使用ASP.NET服務器端應用程序來託管多個Web服務,反過來,訪問WCF服務,但這並不重要)。 Silverlight應用程序必須能夠調用Web服務跨域(這意味着Web服務不一定位於託管Silverlight應用程序的同一臺服務器上)。在Silverlight中使用ASP.NET會話狀態(PRISM)

Silverlight應用程序由幾個模塊組成,每個模塊都訪問ASP.NET Web服務。

我沒有太多的經驗與Silverlight和PRISM,但據我所看到的,這並不是一個非常不尋常的場景......

問題: 我challange是,當兩個不同的模塊訪問Web服務,我在Web服務器上得到2個新會話。我會認爲,因爲兩個模塊都在同一個HTML頁面上(然後也在同一個瀏覽器會話中),他們會在Web服務器上獲得相同的會話......?

我試圖通過註冊一個實例(使用Container.RegisterInstance)在容器中使用全局可用的Web服務代理客戶端(使用Unity),然後在模塊需要創建Web時獲取此實例 - 服務調用(使用Container.Resolve),但這似乎沒有幫助。

但是,在同一模塊內進行的任何調用總是在服務器上獲得相同的會話。

任何人都可以看到我在這裏失蹤...?

謝謝!

Jon

回答

1

看起來像我找到了我自己的答案。

問題是我的應用程序在啓動時觸發了多個Web服務調用(不同的PRISM模塊獨立工作)。而且,在網絡服務器發出任何響應之前進行了幾次調用,在進行後續調用之前,沒有會話(因此沒有提供「ASP.NET_SessionId」cookie)返回給客戶端。

我的解決辦法,以確保我做一個調用(異步一如既往),例如一個簡單的平如Web服務,然後按住所有其他呼叫到網絡服務器上,直到這個響應又回來了。然後,所有後續調用在服務器上被賦予相同的Session(因爲現在它們都在頭中包含「ASP.NET_SessionId」cookie)。

在實踐中,這個調用是由PRISM-shell完成的,在我收到響應之前沒有模塊正在加載。然後我確信,在手頭有一個會話狀態之前,其他模塊都不會觸發快樂。

不過,如果有人看到這個解決方案的其他問題,我很樂意聽到你的消息。

謝謝!

Jon