现在的位置: 首页 > 综合 > 正文

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

2013年08月20日 ⁄ 综合 ⁄ 共 1894字 ⁄ 字号 评论关闭

今天我给大家演示的是创建一个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运行后, 结果如图:

抱歉!评论已关闭.