数据库LINQ TO SQL在Silverlight中的应用(WCF)

作者: T.T (timet)
 
这段时间在完成一个SILVERLIGHT的在线视频教学的程序,初次使用SILVERLIGHT,所以也是摸索着如何使用,把自己开发过程中发现的一系统列问题与解决方法与大家分享一下,也欢迎大家指出我的错误.
 
第一篇是关于数据库LINQ TO SQL在Silverlight中的应用(WCF)
作者:T.T,转自http://tt.izx.cc
 
步骤:
1. 创建SILVERLIGHT应用程序
2. 创建LINQ TO SQL [注意序列化的问题]
3. 创建WCF
4. 在SILVERLIGHT中应用WCF
 
1. 创建SILVERLIGHT应用程序
 
我用的是Visual Studio 2008 professional和Expression Blend,我通常喜欢用Visual Studio来创建Silverlight工程.
 
 
记得一定要选择上面那个, 因为之后要加C#项目中添加WCF
 
 
点“确定”后,我们会看到在我们新建的解决方案中有2个项目. 之后要做的就是在图片中已选的项目内添加LINQ TO SQL和WCF。
 

 

2. 创建LINQ TO SQL [注意序列化的问题]

 

完成好第一步后,就可以在C#项目里添加LINQ TO SQL了. 当然, 首先我们已经在SQL SERVER里添加好了一个表,叫TEACHER好了,用来存放老师的一些信息, 内有列: TeacherID, Name, Desciption, ImageUrl.

 

OK,添加一个LINQ TO SQL。

 

 

添加好LINQ TO SQL后,我们从"服务器资源管理器"里把TEACHER表拖到LINQ TO SQL里. 这时,一定要注意一个地方, 如果我们要在之后的SILVERLIGHT项目里用到自定义的LINQ TO SQL类(比如List<Teacher>, List<Custom>等), 需要修改属性"序列化模式"为"单向"


 

 

3.创建WCF服务

作者:T.T,转自http://tt.izx.cc

 

为SILVERLIGHT添加WCF服务,如果您安装了VISUAL STUDIO 2008 SP1和SILVERLIGHT TOOLS,就可以直接在“添加新建项”里找到"启用Silverlight功能的WCF服务", 还有,一定得在“C#项目”里添加, 在SILVERLIGHT项目里添加是找不到WCF服务的.

 

 

当然,您也可以直接添加WCF 服务, 不过添加后需要修改一些配置才能支持Silverlight.比较麻烦.

 

添加好WCF服务后,我们就可以开始在开始写代码了, 进入WCFTeacher.svc

 

  1. namespace IZX.cc_Silverlight
  2. {
  3.     [ServiceContract(Namespace = "")]
  4.     [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
  5.     public class WCFTeacher
  6.     {
  7.         TeacherDataContext db = new TeacherDataContext();
  8.         
  9.         [OperationContract]
  10.         public List<Teacher> GetTeacher(int teacherID)
  11.         {
  12.             //这里使用的是LINQ语言,在这里我们不详细介绍它了.下面的意思是通过teacherID找到指定的TEACHER表中的所有列
  13.             var teacher = from p in db.Teacher where p.TeacherID == teacherID select p;
  14.             //返回List<Teacher>
  15.             return teacher.ToList<Teacher>();
  16.         }
  17.         // 如果要添加更多操作,请使用 [OperationContract] 标记它们
  18.     }
  19. }

如果您使用的是"启用Silverlight功能的WCF服务", 并没有实现接口,所以我们没有看到IWCFTeacher.cs, 而是直接在WCFTeacher.svc.cs文件中编写上面的代码. 上面的代码中只实现了1个功能,就是从TEACHER表中返回指定TEACHERID的所有列。如果您要添加其他方法,需要在每个方法前加入[OperationContract].

 

作者:T.T,转自http://tt.izx.cc

另外,[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]这句的意思是添加ASP.NET与WCF的兼容.

 

还要需要解释的是这里我们用到了返回值List<Teacher>, Teacher是我们的自定义的类,所以前面的LINQ TO SQL的属性里我们一定要改序列化模式,要不然在SILVERLIGHT远程调试时WCF服务会出错

 

4. 在SILVERLIGHT中应用WCF

 

搞定完上面的步骤后,我们就可以跑到SILVERLIGHT项目中“添加服务引用”了

 

 

在添加窗口需要注意的是如果你是用VS2008进行调试的话,一定要将LOCALHOST的端口固定,比如固定成“63031”,如果您是自己用IIS建的网站里调试,就不需要注意这些了, WCF需要在一个固定的区域里才能有效,比如"http://localhost:63031/WCFTeacher.svc"或"http://192.168.1.21/WCFTeacher.svc".

 

 

你也可以点“发现”,VS将自动找到解决方案里的WCF服务。

 

另外,你也可以把命名空间改成自己想要的名字, 为了以后在SILVERLIGHT应用找更加容易识别.

 

添加完“服务引用”后,你就可以在SILVERLIGHT代码中应用我们刚在WCF服务代码中写的方法了.

 

但是因为我们WCF代码中使用到了LIST,所以我们需要在SERVICE REFERENCE目录下的你刚刚创建的WCF服务引用中点右键,配置服务引用。将集合类列改成"System.Collections.Generic.List"

 

如果你修改了C#项目中WCF服务,需要生成解决方案,然后SERVICE REFERENCE目录下点右键,更新服务引用

作者:T.T,转自http://tt.izx.cc

 

在SILVERLIGHT中应用我们在WCF中写的方法,具体代码如下:

 

1.首先我们要在使用的类中声明:

 

  1. WCFTeacherClient client = new WCFTeacherClient ();

 

2. 然后添加完成事件,并执行异步

  1. //添加完成事件
  2. client.GetTeacherCompleted += new EventHandler<GetTeacherCompleted EventArgs>(client_GetTeacherCompleted);
  3. //执行GetTeacher方法,返回值在client_GetTeacherCompleted中操作
  4. LectureDB.GetTeacherAsync(lectureID);

3. 在client_GetTeacherCompleted方法中处理我们得到的数据

  1. private void client_GetTeacherCompleted(object sender, GetTeacherCompleted EventArgs e)
  2.         {
  3.             if (e.Error == null//如果在执行异步过程中没有出错的话 
  4.             {
  5.                 foreach (var its in e.Result) //e.Result就是我们从WCF服务得到的返回值 
  6.                 {
  7.                     its.Name; //得到老师的名字 
  8.                     its.ImageUrl; //得到老师的图片地址 
  9.                     //.........等等,你要添加的其他操作 
  10.                 }
  11.             }
  12.             else
  13.             {
  14.                 this.TextBlock1.Text = e.Error.Message; //显示出错信息 
  15.             }
  16.         }
OK,这样我们就可以在SILVERLIGHT中访问SQL了,这里需要注意的一个地方是ServiceReferences.ClientConfig这个文件
 
  1. <configuration>
  2.   <system.serviceModel>
  3.     <bindings>
  4.       <basicHttpBinding>
  5.         <binding name="BasicHttpBinding_LectureDataService" maxBufferSize="2147483647"
  6.           maxReceivedMessageSize="2147483647">
  7.           <security mode="None" />
  8.         </binding>
  9.       </basicHttpBinding>
  10.     </bindings>
  11.     <client>
  12.       <endpoint address="http://www.izx.cc/WCFTeacher.svc##这里要改成你的服务器SVC地址"
  13.         binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_LectureDataService"
  14.         contract="LectureDataService.LectureDataService" name="BasicHttpBinding_LectureDataService" />
  15.     </client>
  16.   </system.serviceModel>
  17. </configuration>

如果你要上传至服务器了,一定要改成服务器地址,要不然会出错的.

 

---------end---------

 

小弟的技术也只是很一般,很希望与大家一起学习,一起进步,我的QQ是367271

CSDN博客地址是: http://blog.csdn.net/timet 或 http://tt.izx.cc

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值