代码改变世界

多个Silverlight应用程序如何共享一个DomainService

2011-11-14 17:02  slmk  阅读(1320)  评论(1编辑  收藏  举报

WCF RIA Services使用DomainService提供数据访问等服务,如果在Silverlight中使用,只要设置了WCF RIA连接,就能自动生成数据访问的客户端代理类,这为我们开发提供了方便。

我们通常是建立一个Silverlight Bussiness Application的项目,其中包含一个Silverlight项目作为客户端,一个Web结尾的项目承载我们的Domain Service服务。

刚开始我还受用这种模式,数据访问那么的自然,没有多余的WCF请求代码。然而当我做第二个应用程序时,遇到了麻烦,我该如何重用第一个应用程序中已经写好的Domain Service呢?我首先想到了把我的SL连接到上一个Web项目,然而一个SL应用只能连接一个Web项目,我不想把所有代码都放在一个应用程序下面,并且如果我要连接的web项目不是我开发的,我又该怎么连接?然后,我想到了添加服务引用,就像WCF服务一样,然而Domain Service总是不被其他SL项目发现,需要配置web.config将Endpoints暴露出来,并且这样等于放弃了WCF RIA Services的优势。

最后,终于找到了解决方法:使用WCF RIA Service类库。然而类库并不能独立发布,必须在Web项目中承载后,才能供我们访问,这样我们的解决方案的结构应该是:

其中ShareRIAServices开头的俩项目是WCF RIA Service类库项目,一个用于供silverlight项目引用,一个供Web项目引用。

FistSilverlight.Web项目承载DomainSerive服务ShareRIAServices.Web,提供访问。

AnotherSLApp引用ShareRIAServices,其中包含了自动生成的客户端Proxy代码。并且包含在另一个应用AnotherWeb中.

由于URL路径不同,我们Context类需要指定DomainService的URL地址:

 const string ServicePath = "http://localhost:52878/ShareRIAServices-Web-ShareDomainService.svc";
ShareRIAServices.Web.ShareDomainContext sc = new ShareDomainContext(new Uri(ServicePath));

服务的命名是名称空间+类名.svc,其中用“-”连接。

这样任何需要使用ShareRIAServices.Web中的DomainService服务的SL应用程序,只需要引用ShareRIAServices即可,如果是别人开发的,只需要引用ShareRIAServices.dll就行。

 

提供Silverlight打印全套解决方案及全部源代码--支持打印预览、页面设置(横向纵向,页边距,纸张大小、字体大小)、自动分页和多页连续打印