我有一个设计为 3 层应用程序的 XBap 系统。XBap 客户端使用 netTcpBinding 通过 WCF 服务使用逻辑。
为了便于数据绑定并能够重新使用业务对象中内置的数据验证,我选择从 xBap 客户端引用业务对象库,而不是生成代理。
这些对象除了拥有基本的数据验证之外没有实现任何逻辑。真正的业务逻辑是在我的 WCF 服务中实现的。
现在我面临着一个巨大的挑战。我需要将 xBap 移植到 silverlight,所以我需要我的 silverlight 应用程序。使用相同的业务逻辑(winforms LOB 应用程序也使用它)。
出现的一些问题:
1) 无法从 silverlight 客户端应用程序引用业务对象库,因为它被编译为常规 dll 而不是 silverlight 的。
2) 无法将其编译为 silverlight 库,因为我会失去很多功能,而且显然不是一个好主意。如果将来出现新的 .net 平台,我不保证修改后的(silverlight)dll 将起作用。
当我发现 RIAServices 时,我还抱有希望。我在某处读到我可以实现服务并使用任何类型的 DAL。(我有一个自定义的)但我没有找到展示如何将 RIAServices 放在现有业务层之上的示例。值得一提的是,我们不使用(而且我们不打算)LINQ。我发现的每个示例都开始使用 RIAServices 并使用 LINQ 从头开始编写业务逻辑。
RIAServices 生成数据绑定就绪的客户端代码,但我觉得我必须更改整个业务层,这将非常昂贵。
因此,解决方案似乎是继续使用 WCF,特别是现在 silverlight 3.0 支持新的二进制绑定,并使用代理而不是实际的业务对象。问题是这些代理不包括我的业务类执行的三个方面的数据验证、属性更改通知和更改跟踪。
RIAServices 解决了这些和其他方面,但它需要与 silverlight proyects 一起工作。WCF (SVCUtil.exe) 生成代理,但它们对于我们的需要并不“完整”。所以看来我必须开发自己的实用程序来生成那些将业务对象作为输入的代理。
在我开始这样做之前,我想知道是否有人已经遇到过这个问题,并且能够以一种方便且无痛的方式解决它。
提前致谢,
贡萨洛