原文地址: http://www.dingos.cn/index.php?topic=2000.0
第二十六章 创建 WCF 访问检索 Session 数据 - part II
创建一个新的 Silverlight 项目和具有承载 Silverlight 控件 Web 项目。
打开 Visual Studio 并选择菜单“文件” -> “新建” -> “项目”
步骤:
1. 打开 Visual Studio 并选择菜单 “文件” -> “新建” -> “项目”
2. 在你喜欢的语言下面选择项目类型为“ Silverlight ”并选择“ Silverlight 应用程序”模板。 这里我们选择的是 Visual C# 。为项目命名为“ AccessSessionFromSilverlight ”并选择“为解决方案创建目录”选项因此所有项目文件多在文件夹结构中。
3. 在下一个对话框中,选择“为解决方案添加一个承载控件的 Web ”
4. 在 Visual Studio 创建解决方案 后,右键解决方案资源管理器中的 Web 项目并选择“添加新项”。
选择默认名字“ Service1.svc ”并按“添加” 按钮。
5. 从对话框左边面板选择“ Silverlight ”类别。从右边面板,选择“ Silverlight-enabled WCF 服务”模板。
6. 选择默认名字“ Service1.svc ”并按“添加” 按钮。
7. 你看到如下代码:
[ServiceContract (Namespace = "" )]
[AspNetCompatibilityRequirements (RequirementsMode =
AspNetCompatibilityRequirementsMode .Allowed)]
public class Service1 {
[OperationContract ]
public void DoWork() {
// 在此处添加操作实现
return ;
}
// 在此处添加更多操作并使用 [OperationContract] 标记它们
}
按如下显示添加新的 方法:
[OperationContract ]
public object GetSessionVariable(string key) {
return System.Web.HttpContext .Current.Session[key];
}
8. 打开解决方案资源管理器。右键“ Service1.svc ”文件并选择“设为起始页”
9. 按 Ctrl + F5 运行应用程序(或使用 菜单“调试” –> “开始执行不调试”)。
在浏览器打开 Service1 元数据并显示。忽略页面内容,从浏览器复制 URL 。 URL 类似于:
http://localhost:1873/Service1.svc
这个端口号可能会不 同。
10. 回到 Visual Studio 的解决方案管 理器。右键 Silverlight 项目(不是 Web 项目)并选择“添加 Service 引用”。
在地址域中,指定从 浏览器中复制的 URL ,点击“前往”。
在底部左边,修改命 名空间为“ MySampleService ”。点击“确定”按钮添加服务引用。
现在可以从 Silverlight 客户端调用 WCF 服务。
按下面步骤测试:
1. 打开 Page1.xaml 文件并添加一个文本 框用于显示从 WCF 方法返回的字符串。
2. 从 UserControl 中添加“ Loaded ”事件。
Page1.xaml 中的完整代码如下:
< UserControl x : Class ="Silverlight_With_WCF.Page"
xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns : x ="http://schemas.microsoft.com/winfx/2006/xaml"
Width ="400" Height ="300"
Loaded ="UserControl_Loaded">
< Grid x : Name ="LayoutRoot" Background ="White">
< TextBlock x : Name ="textblock1" Width ="200" Height ="30"></ TextBlock >
</ Grid >
</ UserControl >
现在在后置代码中( Page1.xaml.cs )中,按如下方式添加 WCF 服务调用:
private void UserControl_Loaded(object sender, RoutedEventArgs e) {
MyService.Service1Client client =
new AccessSessionFromSilverlight.MyService.Service1Client ();
client.GetSessionVariableCompleted +=
new EventHandler <AccessSessionFromSilverlight.MyService.
GetSessionVariableCompletedEventArgs >(
client_GetSessionVariableCompleted);
client.GetSessionVariableAsync("Name" );
}
void client_GetSessionVariableCompleted(object sender,
AccessSessionFromSilverlight.MyService.
GetSessionVariableCompletedEventArgs e) {
if (e.Result == null )
textblock1.Text = "Session variable not set" ;
else
textblock1.Text = e.Result.ToString();
}
在解决方案资源管理器中打开 Web 项目,并设置 Silverlight 测试页面为起始页码。运行项目。可以看到 Silverlight 客户端调用 WCF 服务的显示结果。