网站导航免费论文 原创论文 论文搜索 作业答案 网学软件 学术大家 资料中心 会员中心 问题解答 定作论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 设计资源 > Silverlight > 正文
Silverlight中的数据访问
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: Admin 发布时间: 10/07/26

主要是实现WCF框架下,通过LINQ TO SQL,实现服务器端和客户端之间的通信

1,新建一个项目,命名为DataGrid,给网站固定服务端口号,这里以49806为例

2,添加WCF服务,命名为contacter,完成后网站目录下出现contacter.svc与Icontacter.cs文件

    注:如果跨域需要添加跨域文件cilentaccesspolicy.xml,且若WCF服务URL位于http://localhost:49086/wcf/contacter.svc,则该策略文件放在localhost目录下,即http://localhost:49086/cilentaccesspolicy.xml,而不是localhost/wcf的目录下。

3,添加一个LINQ TO SQL类,并加入相关命名空间,这里设置ContextNamespace,Entity Namespace为Linq,并添加实体类

QQ截图未命名

4,现在开始编写WCF的服务契约文件Icontacter.cs

  1. public interface Icontacter 
  2.   { 
  3.       [OperationContract] 
  4.       List<Linq.contacter>  GetContract();  
  5.   } 

5,在contacter.svc文件中实现方法

  1. public class contacter : Icontacter 
  2.    {       
  3.        public List<Linq.contacter> GetContract() 
  4.        {          
  5.            Linq.DataClasses1DataContext db = new Linq.DataClasses1DataContext (); 
  6.            var query = from p in db.contacters 
  7.                       select p; 
  8.            var list = query.ToList<Linq.contacter>();           
  9.            return  list; 
  10.        } 
  11.    } 

之前在这里遇到一个问题:直接用using Linq;语句,然后返回语句写return query.ToList<contacter>()时,总是出现
Cannot implicitly convert type 'System.Collections.Generic.List<Linq.contacter>' to
'System.Collections.Generic.List<DataGrid.Web.contacter>' 的编译错误
最终发现是因为Linq To SQL中的实体类contacter与WCF服务的命名相同,导致编译器无法顺利的识别,教训!

6,现在需要配置一下Web.config文件,为WCF服务设置正确的参数 

  1. <system.serviceModel> 
  2.   <behaviors> 
  3.    <serviceBehaviors> 
  4.     <behavior name="DataGrid.Web.contacterBehavior"> 
  5.      <serviceMetadata httpGetEnabled="true" /> 
  6.      <serviceDebug includeExceptionDetailInFaults="false" /> 
  7.     </behavior> 
  8.    </serviceBehaviors> 
  9.   </behaviors> 
  10.    <services> 
  11.      <service behaviorConfiguration="DataGrid.Web.contacterBehavior" name="DataGrid.Web.contacter"> 
  12.        <endpoint address="" binding="basicHttpBinding" contract="DataGrid.Web.Icontacter"></endpoint>          
  13.      </service> 
  14.    </services> 
  15.  </system.serviceModel> 

因为对WCF配置还不是很了解,需要注意各种参数的配置

7,运行一下contacter.svc,没有错误的话,可以成功的看到浏览器上contract Service的相关信息

8,在银光的客户端引用该服务,命名空间为默认的ServiceReference1,如果在服务器端对contacter.svc等相关文件进行更改时,不要忘了更新该引用

9,在Page.XAML文件中添加一个DataGrid,设置AutoGenerateColumns="True"即可

10,编写后台代码:

  1. public Page() 
  2.    { 
  3.        InitializeComponent(); 
  4.        ServiceReference1.IcontacterClient proxy = new ServiceReference1.IcontacterClient(); 
  5.        proxy.GetContractCompleted += new EventHandler<ServiceReference1.GetContractCompletedEventArgs>(proxy_GetContractCompleted); 
  6.        proxy.GetContractAsync(); 
  7.    } 
  8. id proxy_GetContractCompleted(object sender, DataGrid.ServiceReference1.GetContractCompletedEventArgs e) 
  9.    { 
  10.        this.dataGrid1.ItemsSource = e.Result; 
  11.    } 

IcontacterClient等方法都是由WCF自动生成的,对于GetContractCompleted也可以利用Lamda表达式改写一下,代码看起来更简洁

  1. public SilverlightControl1() 
  2.        { 
  3.           InitializeComponent(); 
  4.           ServiceReference1.IcontacterClient proxy = new ServiceReference1.IcontacterClient();            
  5.           proxy.GetContractCompleted+=(o,e)=> 
  6.            { 
  7.                this.dataGrid1.ItemsSource=e.Result; 
  8.            }; 
  9.           proxy.GetContractAsync(); 
  10.        } 

11,最后运行效果

QQ截图未命名1

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 电话:013574892963 QQ:3710167 邮箱:Educs@163.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 Www.myeducs.Cn All Rights Reserved
湘ICP备09003080号