将.NET类库(主要定义CRUD操作)公开为服务

将现有(类)库 (主要定义CRUD操作)作为服务WCF服务WCF数据服务 )公开的最佳,有效和最快的方法是什么,以便它可以与SilverlightAjax一起使用。 是否有工具 (代码生成器,RAD工具)可以支持这个? 在此先感谢您的帮助和提示。

最好的方法是使用WCF自己创建一个包装器。

您应该这样做,而不是使用一些自动化直接公开库,因为:

  • 安全性,您是否希望任何人随时在图书馆上打电话?
  • 大多数库假设它们是直接调用而不是通过服务调用(参见企业开发的谬误 )。
  • WCF默认是无状态的:您需要弄清楚如何管理库假定的任何状态(您将不再拥有单个客户端)。
  • 我提到了安全吗?

如果你的类只是一个愚蠢的数据集合,只需在其上抛出一个DataContract。 (不要忘记命名空间,否则您将在以后踢自己。)然后,您可以使用Web项目公开它。

如果你class上有实际的逻辑,那你就麻烦了。 没有好的方法与Silverlight应用程序共享业务逻辑。 他们尝试使用RIA服务,但它只是没有成绩。

您应该查看WCF数据服务,尤其是在.NET 4中。虽然您必须创建数据上下文类或类以公开您的实体以及公开IQueryable并实现IUpdatable,然后您可以利用支持框架WCF数据服务为您的数据有效负载提供标准化协议(OData)。

在.NET 4和Visual Studio 2010中,WCF数据服务正在变得越来越被接受,并且正在被Microsoft推动作为Silverlight应用程序的良好数据访问工具。

我认为这至少值得一试。 在MSDN上有很多关于它的信息,虽然我不认为它在某些地方组织得很好。 这是MSDN中使用内置reflection提供程序滚动您自己的WCF数据服务的部分的链接 。 (该示例仅显示数据检索,因为它比数据更新/插入/删除简单得多,但文章中有关于如何实现IUpdatable的链接。)

通过WCF数据服务公开IQueryable应该非常快。 IUpdatable将花费更多时间(因为您需要为每个实体实现插入/更新/删除)。 但是,一旦启动并运行(不应该花费太长时间),您就可以调整安全设置,添加自定义服务方法,并非常轻松地添加其他function和/或实体。 对于您所描述的内容,这是一个很好的框架。

我希望这有帮助。