我正在设计一个资源访问层,它将位于由5个工作站和7个服务器组成的LAN上的数据库服务器上。我对资源访问层的意图是将一组定义良好的C#方法暴露给LAN上的任何C#(。Net 3.5)客户端,并允许客户端访问存储在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消息传递,如果数据要遍历互联网并被多个平台访问,这正是您想要的,但这可能会对我的需求有点过分。 LAN上的所有平台都是windows vista或windows server 2008,都安装了.net 3.5。没有必要将数据序列化为XML,因为所有数据都是可能需要访问它的平台的原生数据。我的另一个问题是速度。该层需要尽可能快,如果需要将数据转码为XML,则会产生开销。
我正在寻找有关在这种情况下使用的最佳.Net技术的任何建议。我可能忽略了WCF可以为我提供的重要好处,或者可能有一种方法可以配置WCF以使用非常基本的有效负载。但是,如果我的担忧是有根据的,那么我将使用.Net远程处理。
对于长期问题道歉,欢迎任何建议。
感谢您的时间,
詹姆斯
答案 0 :(得分:2)
WCF非常快,对于正确设计的用法,它通常比.NET远程处理更快。 Adinochestva发布的第一篇文章讨论了序列化.NET DataSet的性能,这是最糟糕的情况。
为帮助您确定与WCF一起使用的绑定,请查看CoDe杂志上的这篇文章。顶部的流程图非常有用: http://www.code-magazine.com/article.aspx?quickid=0605051&page=3
接近结尾处有各种绑定及其使用的序列化方法的描述。
使用.NET远程处理,您还需要在客户端和服务上共享二进制依赖关系,这不是WCF的要求。通过这种方式,您可以获得远程处理所不具备的版本控制支持。 Remoting也是微软不再投资的一项技术......然而,他们正在大力投资WCF。
希望您会发现WCF的好处超过其限制。
答案 1 :(得分:0)
答案 2 :(得分:0)
使用WCF,您可以使用非常快速的TCP / IP绑定,但只能在Windows平台上运行(在您的情况下可以)。它就像任何Web服务一样工作,除了绑定到http://它使用net.tcp://