VS2010 创建WCF以及SL的客户端如何调用WCF服务 教程(二): 创建调用WCF的SilverLight客户端

2016-08-20 10:33:38来源:http://muzizongheng.blog.51cto.com/856912/1333125作者:muzizongheng人点击


今天我给大家演示的是创建一个SilverLight客户端来调用我们上一节建立的WCF服务.

1. 打开已经创建好的wcf工程WcfService1, 点击"File/Add/New Project/”, 选择SilverLight Application, 如图所示:

2. 点击"Ok”后, vs2010询问我们是否把此Silverlight应用程序嵌入到Asp.net的网站中, 如图所示:

3. 本节我们将创建一个独立的SL应用程序, 因此去掉勾选框后, 选择"Ok".

4. 接下来我们设计SL的界面, 双击MainPage.xaml, 选择设计视图, 向其中添加一个TextBox, 一个Button和一个TextBlock, 分别命名为

_txtValue, _btnGetData, _txtResult, 并将TextBlock的TextWrapping属性设置为Wrap, 双击_btnGetData按钮为其添加单击事件.如图所示:

5. 在"解决方案视图"中, 单击Silverlight工程, 右击"引用", 选择"添加服务引用", 如图所示:

6. 点击"发现"按钮, vs2010自动把我们工程里已经创建好的WCF服务列了出来, 如图所示:

7. 将"命名空间"改为WcfService, 点击"Ok", 这时vs2010已经自动帮我们生成了调用wcf的代理类, 我们单击"解决方案视图"的工具栏的"显示所有文件"按钮, 就可以看到代理类文件Reference.cs, 如图所示:

8. 好了, wcf的服务引用我们已经完成, 现在就是如何使用wcf服务. 首先在MainPage.xaml.cs文件中添加如下代码:

using SLClient.WcfService;

private void _btnGetData_Click(object sender, RoutedEventArgs e) { int nValue = int.Parse(_txtValue.Text); Service1Client sc = new Service1Client(); sc.GetDataCompleted +=new EventHandler<GetDataCompletedEventArgs>(sc_GetDataCompleted); sc.GetDataAsync(nValue); } private void sc_GetDataCompleted(object sender, GetDataCompletedEventArgs e) { if (e.Error == null) { _txtResult.Text = e.Result; } else { _txtResult.Text = "error"; } }

9. 上面代码实现的功能就是把textbox中输入的数字传给wcf服务, 并把调用服务后的结果赋值给textblock.

10. F7编译, F5运行后, 结果如下:

11. 这时如果我们在textBox中输入数字, 点击按钮后发现Silverlight应用程序崩溃了. 不要急, 我们一起来看看问题到底出在哪.

12. 首先, 在按钮的单击事件中放个断点 (F9), 重新运行程序, 输入数字后单击按钮. F10单步调试之后, 相信大家都看到问题了, 执行Service1Client sc = new Service1Client();这条语句导致程序崩溃. 原因是因为SL不支持wsHttpBinding类型的绑定. 解决方法:

1>在"解决方案视图"中右击wcf工程的web.config文件, 选择"编辑WCF设置", 如图所示:

如果您没有看到这个菜单项, 请退出"Asp.net开发服务", 如图所示:

2>单击"WcfService1.Service1”根下的"终结点", 把所有终结点的"绑定"类型设置为basicHttpBinding, "Dns"值置空, 保存后退出, 如图所示:

3>向wcf工程中添加一个新的xml文件, 并命名为crossdomain.xml, 复制下列代码到xml文件中:

xml version="1.0"?>DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"><cross-domain-policy><allow-http-request-headers-from domain="*" headers="*"/>cross-domain-policy>

4>在"解决方案视图"中右击SLClient工程的"服务引用"WcfService, 选择更新服务器引用, 如图所示:

13. 再次F7编译, F5运行后, 结果如图:


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台