.net WinForm胖客户端:架构决策:我是否做出了错误的决策?

.net WinForm胖客户端:架构决策:我是否做出了错误的决策?,.net,sql-server,oracle,multi-tier,.net,Sql Server,Oracle,Multi Tier,我有一个.NET Winform Click Once部署的胖客户端,它与三个数据库、两个SQL Server数据库和一个Oracle数据库通信 第一个SQL Server数据库,我将调用Master。我想在主数据库中添加更多的表和列,但有人告诉我,我无权这样做,因为这是不可协商的。因此,我决定添加一个新的SQLServer数据库,我将其称为Extensions数据库,以存储我想放在Master中的其他信息 由于我无权将扩展数据库放置在与主机相同的服务器上,因此我在另一台服务器上创建了扩展数据库

我有一个.NET Winform Click Once部署的胖客户端,它与三个数据库、两个SQL Server数据库和一个Oracle数据库通信

第一个SQL Server数据库,我将调用Master。我想在主数据库中添加更多的表和列,但有人告诉我,我无权这样做,因为这是不可协商的。因此,我决定添加一个新的SQLServer数据库,我将其称为Extensions数据库,以存储我想放在Master中的其他信息

由于我无权将扩展数据库放置在与主机相同的服务器上,因此我在另一台服务器上创建了扩展数据库,并创建了从扩展数据库服务器到主机数据库服务器的数据库链接。这使我能够执行跨越两个数据库的查询。我还有第三个数据库,一个Oracle数据库,我偶尔会连接到它

因为我认为连接到Oracle数据库需要在最终用户的PC上安装Oracle驱动程序,所以我决定让WinForm客户端调用web服务,web服务将返回结果。为了一致性,而且因为我的直觉告诉我数据库访问操作应该在一个地方执行,所以当胖客户机需要与SQL Server数据库通信时,我采用了相同的方法,即,它们通过web服务

现在,我想问的是,首先必须调用web服务器,然后让web服务器调用数据库,而不是在胖客户机的用户PC上打开连接并直接连接到SQL server数据库,这是否会对性能造成太大的影响。请注意,我所指的应用程序是一个非官方实用程序,需要访问这三个生产数据库,但不允许在生产中实际运行,因此我怀疑我的开发web服务器和生产数据库之间的正常高速管道不适用于此

为了获得最佳性能,我的Winform应用程序是否应该直接建立到SQL Server数据库的连接?取舍是什么

现在连接到Oracle数据库还需要其他驱动程序,或者所有这些都在.NET framework中,如果我愿意,我甚至可以直接连接到Oracle数据库,这是真的吗


此外,我发现使用链接服务器比创建两个单独的数据库连接并将数据集中在一起要慢。当我启动两个a-sync查询,然后将数据组合在一起,就好像它是由一个使用db链接的查询返回的一样,我得到了最好的结果。但是,这会导致维护问题,并使我在需要跨数据库修改SQL do联接时对这种方法感到遗憾。

我认为,如果您已将Oracle server配置为SQL server中的链接服务器,则不需要单独的Oracle驱动程序。您可以将SQL server用作数据源

尝试创建存储过程以获得更快的结果。如果使用SQL management studio,则可以检查执行计划以优化存储过程(配置索引)


我认为在这种情况下不需要web服务。

我不知道您的性能要求,但wcf web服务速度很快。我认为使用中间层(您的web服务)进行数据库访问没有什么错。它也非常安全

我从事企业应用程序开发已有几年,这让我认为中间层(在您的案例中是web服务)总是有意义的,直接从UI连接到DB对我来说总是一个。我认为你没有做出错误的决定。从长远来看,拥有一个中间层确实很有意义。还请注意,您构建的web服务可供不同的应用程序使用。

通过SQL server中的链接服务器通过Oracle连接会降低我的查询速度,但我同意我不需要web服务器对Oracle数据库执行查询。您说过您认为我不需要web服务,换句话说,客户端应该直接连接到数据库。有什么缺点吗?一个不适用于我的缺点是,如果将web服务放在co.firewall之外,我的应用程序可能会在co.firewall之外运行。不知道WCF web服务是什么,我猜它是新一代web服务。但我认为每一个不必要的服务器跳转的延迟都会增加?将其更改为wcf(windows communications framework)web服务。快得多。使用wcf,您可以选择通信协议。顺便说一句,您认为延迟增加了,所以您不确定?您必须使用分析工具来衡量性能,才能真正了解瓶颈。不要因为猜测而改变你的架构。Re:“对我来说总是一个不”我的直觉也告诉我这一点。但为什么呢?如果数据库的结构发生变化,或者从中获取数据的源发生变化,会发生什么情况呢。我的意思是今天你从A,B和C数据库中获取数据。但明天您可能只从D(其模式与A、B和C完全不同)获得它。若您在上述场景中使用中间层,那个么您的UI并没有任何变化。它一直在做它的工作。