【发布时间】:2009-05-19 10:32:45
【问题描述】:
我正在设计一个资源访问层,它将位于由 5 个工作站和 7 个服务器组成的 LAN 上的数据库服务器上。我对资源访问层的意图是向 LAN 上的任何 C# (.Net 3.5) 客户端公开一组定义良好的 C# 方法,并允许客户端访问存储在 DBMS 中的数据,而无需了解数据是如何存储的被访问。这基本上是一个简单抽象的练习。
到目前为止,我已经配置了一个对象关系映射器来从 DBMS (MS SQL Server 2008) 中检索作为实体的数据。然后我编写了一个简单的数据访问类,它使用这些实体来检索和插入数据。示例方法包括 GetUser(Int ID) 和 SetUser(Int ID, String username, String password)。所有方法都采用和返回本机类型,而不是实体对象或类似的包装器。
我想让这个类在 LAN 上远程访问,这样任何 C# 客户端代码都可以使用相同的单例类来访问简单格式的数据。在 .Net 2.0 时代,显而易见的选择是使用 .Net 远程处理并声明类以继承 MarshalByRefObject。然而,随着 .Net 3.5 和 WCF 的到来,有更多的选择。
到目前为止,我一直不愿意将 WCF 用于资源访问层。据我了解,所有数据都作为 SOAP 消息传递,如果数据要遍历 Internet 并被多个平台访问,这正是您想要的,但这对于我的需求来说可能有点过头了。 LAN 上的所有平台都是 windows vista 或 windows server 2008,都安装了 .net 3.5。没有真正需要将数据序列化为 XML,因为所有数据都是可能需要访问它的平台的本机数据。我担心的另一个问题是速度。该层需要尽可能快,如果需要将数据转码为 XML,则会产生开销。
我正在寻找有关在这种情况下使用的最佳 .Net 技术的任何建议。我可能忽略了 WCF 可以为我提供的一个重要好处,或者可能有一种方法可以配置 WCF 以使用非常基本的有效负载。但是,如果我的担忧是有根据的,那么我将使用 .Net 远程处理来代替它。
抱歉,问题很长,欢迎提出任何建议。
感谢您的宝贵时间,
詹姆斯
【问题讨论】: