1

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

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

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

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

我试图通过注册一个实例(使用 Container.RegisterInstance),然后在模块需要进行 Web 服务调用时获取该实例(使用 Container.Resolve),但这似乎没有帮助。

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

谁能看到我在这里想念的东西......?

谢谢!

乔恩

4

1 回答 1

1

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

问题是我的应用程序在启动时触发了多个 Web 服务调用(不同的 PRISM 模块独立工作)。并且当在 Web 服务器给出任何响应之前进行了多次调用时,在进行后续调用之前,没有会话(因此没有提供“ASP.NET_SessionId”cookie)返回给客户端。

我的解决方案是确保我拨打一个电话(一如既往地异步),例如对一个简单的类似 Ping 的 web 服务,然后保持对 web 服务器的所有其他调用,直到这个响应返回。然后,在服务器上为所有后续调用提供相同的 Session(因为现在它们都在标头中包含“ASP.NET_SessionId”cookie)。

实际上,这个调用是由 PRISM-shell 发出的,在我收到响应之前没有加载任何模块。然后我绝对确定在我手头有会话状态之前,其他模块都不会触发快乐。

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

谢谢!

乔恩

于 2010-05-05T09:12:11.557 回答