视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Silverlight通过httpBinding访问IIS宿主WCF
2020-11-09 08:13:52 责编:小采
文档

silverlight和wcf通信是大家开发中用得相对较多的东西,我以Silverlight 通过 httpBinding 访问 IIS 宿主 WCF 来简单介绍一下。 Silverlight 通过 httpBiding方式 访问 IIS 宿主 WCF是我们在Silverlight与WCF通信中最为常见的,也是用的最多的,我们用个很简

silverlight和wcf通信是大家开发中用得相对较多的东西,我以Silverlight通过httpBinding访问IIS宿主WCF 来简单介绍一下。

Silverlight通过httpBiding方式访问IIS宿主WCF是我们在Silverlight与WCF通信中最为常见的,也是用的最多的,我们用个很简单的例子进行演示。

项目结构:

项目目结构简单说明:

程序集名称 需添加的引用 简要说明
LxContracts System.Runtime.Serialization System.ServiceModel 用于存放操作契约与数据契约
LxServices LxContracts[项目] 服务,操作契约的实现
WcfHost.web LxContracts[项目] 和LxServices[项目] 利用Svc文件发布服务的站点
SilverlightDemo Silverlight程序,调用WCF服务

注意:建立Silverlight程序的时候,不需要承载网站,建立一个单一的Silverlight程序即可,这样做的原因是,把Silverlight和WCF服务不放到同一个站点下面,是为了演示跨域的问题。

代码实现:

类库LxContracts:(包括数据契约Student.cs和操作契约IStudent.cs)

Student.cs 代码

代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.Runtime.Serialization;

namespace LxContracts
{
 [DataContract]
 public class Student
 {
 /// 
 /// 学生编号
 /// 
 [DataMember]
 public int StuId { get; set; }

 /// 
 /// 学生姓名
 /// 
 [DataMember]
 public string StuName { get; set; }

 /// 
 /// 所在班级
 /// 
 [DataMember]
 public string ClassName { get; set; }

 /// 
 /// 联系电话
 /// 
 [DataMember]
 public string TelPhoneNum { get; set; }
 }
}
Student.cs 代码

代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.ServiceModel;

namespace LxContracts
{
 [ServiceContract]
 public interface IStudent
 {
 [OperationContract]
 List GetStudent();
 }
}
类库LxServices:( 改类库包括一个模仿获取数据库集合类StudentList.cs和服务类StudentService.cs)

StudentList.cs

代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using LxContracts;

namespace LxServices
{
 public class StudentList:List
 {
 public StudentList()
 {
 this.Add(new Student() { StuId = 1, StuName = "小明", ClassName = "计算机一班", TelPhoneNum = "123456" });
 this.Add(new Student() { StuId = 2, StuName = "小红", ClassName = "计算机二班", TelPhoneNum = "234567" });
 this.Add(new Student() { StuId = 2, StuName = "小兰", ClassName = "计算机三班", TelPhoneNum = "0123" });
 }
 }
}
StudentService 代码

代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using LxContracts;

namespace LxServices
{
 public class StudentService:IStudent
 {
 public List GetStudent()
 {
 //实际情况应该为从数据库读取
 //本例手动生成一个StudentList
 StudentList ListStuent = new StudentList();
 return ListStuent;
 }
 }
}
站点WcfHost.web

站点WcfHost.web,这是一个Asp.net 空web应用程序。

1、右击” WcfHost.web”—“添加”—“新建项”—“wcf服务”,命名为”StudentSrv.svc” 。如图:

在项目中删除”StudentSrv.svc.cs”文件和”IStudentSrv.cs”文件。右击”StudentSrv.svc”文件,选择”查看标记”,将代码修改为:

<%@ ServiceHost Language="C#" Service="LxServices.StudentService" %>

2、修改webconfig 文件,代码如下:

WebConfig

代码如下


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
注意:endpoint中的address 为空:因为svc文件的地址就是元数据发布的地址。

3、右击”StudentSrv.svc”文件,在”浏览器中查看”,显示如下图,说明服务已经部署好了,我用的端口是 9090:

在Silverlight中进行调用:

Silverlight调用wcf很简单,直接在”SilverlightDemo”中添加”服务引用即可”,Silverlight项目中会自动生成” ServiceReferences.ClientConfig”配置文件,当然也可以利用代码的方式调用,但是我比较懒 :)。

1、为Silverlight程序添加WCF:

“右击”—“SiverlightDemo”—“添加服务引用”—“输入服务地址”(我的是http://localhost:9090/WCF/StudentSrv.svc)--点击“前往”,就会找到服务,命名为“WCF.StudentSrv”后,点击“确定”

2、在Silverlight中调用WCF:

MainPage.xaml中添加”DataGrid”控件,xaml代码如下:

MainPage.xaml 代码

代码如下

 
 
 
 
 
 
 
MainPage.cs 代码

代码如下

public partial class MainPage : UserControl
 {
 ObservableCollection listStudent;
 public MainPage()
 {
 InitializeComponent();
 listStudent = new ObservableCollection();
 this.Loaded += new RoutedEventHandler(MainPage_Loaded);
 }

 void MainPage_Loaded(object sender, RoutedEventArgs e)
 {
 StudentClient proxyClient = new StudentClient();
 proxyClient.GetStudentAsync();
 proxyClient.GetStudentCompleted += new EventHandler(proxyClient_GetStudentCompleted);
 }

 void proxyClient_GetStudentCompleted(object sender, GetStudentCompletedEventArgs e)
 {
 if (e.Error == null)
 {
 listStudent = e.Result;
 this.dgStudnet.ItemsSource = listStudent;
 }
 }
 }

运行结果:

将” SilverlightDemo”设置为启动项目,运行,会产生下面的异常:

这就是因为当时建立项目的时候没有把Silverlight程序和WCF服务放到同一个站点的缘故,因此需要在发布WCF的网站根目录放置一个跨域文件:clientaccesspolicy.xml

clientaccesspolicy.xml



 
 
 
 
 
 
 
 
 
 

再次运行,结果如下图所示:

至此,Silverlight通过httbBingding方式访问IIS宿主的WCF的演示我们就进行到这里

下载本文
显示全文
专题