从 Silverlight 和 ASP.NET 访问会话






4.71/5 (21投票s)
从 Silverlight 和 ASP.NET 添加或检索会话对象
引言
微软的另一个受欢迎的产品是用于富互联网应用程序 (RIA) 的“Silverlight”。它的主要目的是提供更多用户交互功能,并具有非常好的外观和感觉。
由于 Silverlight 针对跨浏览器、跨平台应用程序,因此具有 Web 应用程序经验的开发人员会比较其他 Web 应用程序提供的不同功能。
大多数 Web 应用程序需要借助各种机制来维护会话状态。在使用 Silverlight 时,我们可能需要从 ASP.NET 会话中添加或获取数据。
由于 Silverlight 在客户端环境中运行,因此它无法直接访问 ASP.NET 会话对象。我们可以从会话中检索信息的唯一方法是通过 Web 服务。
本文仅解释了如何在实际工作解决方案中使用此场景。
假设
我假设准备好使用此示例的开发人员在 ASP.NET、C#、WCF 和 Silverlight 方面具有或多或少的经验。
开发工具
- Visual Studio 2008
- Silverlight SDK RTM 2.0
让我们开始
按照下面给出的步骤创建解决方案
- 从 Visual Studio 创建一个新的 Silverlight 网站。
- 向 Web 应用程序添加一个 WCF 服务。我们需要它让 Silverlight 从 `Session` 中添加或获取值。默认情况下,wsHTTP 协议已添加到配置中。
- 通过更改 Web 应用程序的“*Web.config*”文件中的设置,确保 WCF 配置为“`basicHTTP`”协议。
- 如果 WCF 服务带有接口,请不要犹豫,从项目中删除它,因为我们正在使用 Web 应用程序本身托管它。
- 将 Web 服务引用添加到 Silverlight 应用程序。
- 向 Web 应用程序添加 2 个新的网页,以便同时使用 Silverlight 和 Web 应用程序 `Session` 状态以进行我们的测试目的。
执行完上述步骤后,您的 Visual Studio 可能会是这样的
每个网页(ASP.NET 页面和 Silverlight 页面)都允许我们从 `Session` 添加和/或获取信息。用户界面可能是这样的:

在此示例中,我们执行 4 个不同的操作,如下所示
- 从 ASP.NET 页面将信息添加到 `Session` **(ASPNetPage.aspx)**
- 从 ASP.NET 页面检索来自 `Session` 的信息 **(ASPNetPage.aspx)**
- 通过 WCF 服务从 Silverlight 页面将信息添加到 `Session` **(SilverlightPage.aspx)**
- 通过 WCF 服务从 Silverlight 页面检索来自 `Session` 的信息 **(SilverlightPage.aspx)**
在 ASP.NET 中,我们使用以下代码在 `Session` 中存储或检索信息
Session[variableName] = someValue; // Add or update information in Session
Object sessionVar = Session[variableName]; // Retrieve information in Session
以下代码允许您从 Silverlight 将信息添加到 `Session`
public void btnAddToSession_Click(object sender, RoutedEventArgs e)
{
lblAddToSessionStatus.Text = "Adding value to Session...";
client.SetSessionValueForKeyAsync(txtAddSessionKey.Text, txtAddSessionValue.Text);
}
void client_SetSessionValueForKeyCompleted
(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
if ((null != e.Error) && (!String.IsNullOrEmpty(e.Error.Message)))
{
lblAddToSessionStatus.Text = "Error: " + e.Error.Message;
}
else
{
lblAddToSessionStatus.Text = "Successfully added.";
}
}
以下代码允许您从 ASP.NET 页面检索 `Session` 中的信息
protected void btnGetFromSession_Click(object sender, EventArgs e)
{
if (null != Session[txtGetFromSessionKey.Text])
{
txtGetFromSessionValue.Text = Session[txtGetFromSessionKey.Text] as string;
lblGetFromSessionStatus.Text = "Done.";
}
else
{
lblGetFromSessionStatus.Text = "Session Key does not exist.";
}
}
当您运行附加的应用程序时,UI 如下所示

结论
关于 Silverlight 和 ASP.NET 会话的这一部分就到此为止。我解释了如何从 Silverlight 和 ASP.NET 将 `Session` 值添加/检索到 `Session` 对象。尽管可能有许多其他方法可以完成相同的任务,但我尝试给出基本实现。请随时提供反馈。
我希望这篇文章对您有所帮助。 :)
历史
- 20日 2009 年 1 月:初始帖子