2

目前我有一个使用.Net RIA 服务的Silverlight 应用程序。

它的结构:

客户端

  • Application.Client.UI.dll(Xamls 和基本的 UI 东西)
  • Application.Client.BL.dll(包含指向 RIA 的链接和大部分业务逻辑)

服务器端

  • Application.Server.Data.dll(保存实体模型及其生成的域服务的服务器端 dll)
  • Application.Server.Web.dll(仅 ASP.net 托管容器,它引用 Application.Server.Data.dll)

我将大部分业务逻辑放在客户端(Application.Client.BL.dll),以获得更好的用户体验(快速反应)并释放服务器资源。我现在面临的挑战是在服务器端 Windows 服务中重用这个客户端 dll,包括它的 RIA 数据访问功能。我想知道,这可能吗?Application.Client.BL.dll 是否仍然能够使用现有的 RIA 服务,或者该 dll 是否需要 Silverlight 运行时来识别/定位它的服务目标,因此在其他任何地方都不起作用。

好奇你的答案

4

3 回答 3

0

您真的不应该将任何业务逻辑放在客户端上,安全和/或架构方面的人会因此而讨厌您;-)。此外,您不能在 ASP.Net 或桌面项目中使用 Silverlight 程序集,反之亦然。如果内存服务正确,Silverlight 将使用完全不同的 CLR。

于 2010-07-05T22:28:03.697 回答
0

您是否考虑过使用fork-reuse?看一眼:

http://sharednow.blogspot.com/2011/05/its-not-just-reuse.html

于 2011-05-04T23:35:31.177 回答
0

我在使用紧凑的框架程序集时遇到了类似的需求,我还想为完整的框架进行编译。我将描述我将如何解决这种情况。


如果引用 Silverlight 程序集存在任何问题,请考虑构建两个项目,如下所示:

项目 #1 将是您的 Silverlight 库,并且应该包含您要在客户端上使用的所有源文件。

项目 #2 将是您的 Windows 服务。不要直接包含源文件,而是使用“添加现有项目”,在项目 #1 中找到原始源文件,然后(这就是魔法),下拉“添加”按钮进行选择,而是选择“添加为链接” .

截屏

通过将源文件作为链接包含在内,您保留了在一个位置维护源代码的能力,但添加了为多个框架编译代码的能力。只要代码依赖于 Silverlight 框架和完整 .NET 框架中可用的程序集,那么您就是金钱。


现在,无论您是否选择多项目方法,都知道域上下文类具有额外的构造函数,允许您为相应的域服务指定上下文信息,例如 URL。我在一个应用程序中使用以下代码为提供人员数据的域服务构建域上下文:

var context = new PersonnelDomainContext(
    new Uri(ConfigurationManager.AppSettings["PersonnelServiceUrl"]))

在这种情况下,URL 类似于:

http://website-url/Services/Hyphenated-Namespace-PersonnelDomainService.svc

当然,在编写 Windows 服务时,没有什么能阻止您直接引用服务器端域服务(而不是上下文)程序集。有了域服务,您可以实例化一个服务实例,而无需所有额外的配置,也无需额外的网络 XML 负载。这种方法需要权衡取舍,例如放弃集中式配置管理(例如连接字符串),但根据您的情况,您可能会发现这些取舍是值得的。

快乐编码!

于 2011-01-05T18:40:13.723 回答