场景:我在Silverlight(4)中开发了一个Prism应用程序,并且我使用ASP.NET服务器端应用程序托管多个网络服务(反过来又访问WCF服务,但这在这里并不重要)。 Silverlight应用程序必须能够调用Web服务交叉域(这意味着Web服务不一定在托管Silverlight应用程序的同一服务器上)。

Silverlight应用程序由几个模块组成,每个模块访问ASP.NET Web服务。

我对Silverlight和Prism没有太多经验,但据我所知,这并不是一个非常不寻常的情况...

问题:我的挑战是,当2个不同的模块访问网络服务时,我在网络服务器上获得了2个新会话。我本以为,由于两个模块都在同一html页面上(然后在同一浏览器会话中),所以他们会在网络服务器上获得相同的会话...?

我试图通过注册一个实例(使用Container.RegisterInstance),在容器(使用Unity)中全球可用的Web服务代理 - 客户提供全球可用,然后在模块需要进行Web服务调用时获取此实例(使用容器。固定),但这似乎无济于事。

但是,在同一模块中进行的任何呼叫始终在服务器上获得相同的会话。

谁能看到我在这里缺少什么...?

谢谢!

乔恩

有帮助吗?

解决方案

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

问题是我的应用程序是在启动时(独立工作的不同Prism模型)发射多个网络服务电话。而且,当Web服务器从Web服务器发出任何响应之前,请进行几次呼叫时,在随后的呼叫之前,没有会话(因此没有提供“ ASP.NET_SESSINED” cookie“ cookie” cookie)。

我的解决方案是确保我做 呼叫(一如既往的异步),例如,使用一个简单的类似ping的网络服务,然后将所有其他呼叫拨打到网络服务器,直到此响应又回来为止。然后,所有后续的呼叫都在服务器上进行相同的会话(因为现在它们都包含标题中的“ ASP.NET_SESSINED” cookie)。

在Pratice中,此通话是由Prism-Shell进行的,并且在我收到回复响应之前,没有任何模块加载。然后,我绝对敢肯定,在我手头会话状态之前,其他任何模块都没有触发。

不过,如果有人看到此解决方案的其他问题,我很高兴收到您的来信。

谢谢!

乔恩

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top