如何在不打开全局的情况下从桌面应用程序与数据库进行交互?

时间:2013-06-13 19:04:07

标签: c# database web-services

基本上,我的团队和我正在开发的新桌面应用程序将在我们的制造车间的Windows 7桌面上运行。该程序将在引入时大量使用,并需要与我们的制造数据库进行交互。我估计(最终)会有大约100到200台机器同时运行这个应用程序。

我们很幸运,我们从头开始做所有事情,因此我们定义数据库,任何Web服务,程序设计以及上述之间的任何交互。

就像现在一样,我们的遗留应用程序只能直接访问数据库,这很糟糕。我们希望不要使用新的应用程序。

所以我的问题是,我该怎么做?我知道,模糊不清,但基本上我在这里有很多东西可供我使用,而且我不能完全确定正确的方向是什么。

我最初的想法,基于我认为其他人所做的事情,基本上是通过使用webservices来阻止数据库。即,来自场内的所有数据库交互必须通过web服务进行,通过闭门进行大量数据库逻辑来提供一层安全性。然后,通过Active Directory将Webservice调用保护给各个用户。

正如我已经发现的那样,它有自己的一些含义......我们必须在数据到达应用程序之前对其进行抽象。通过反复使用Web服务调用来破坏或垃圾邮件数据,仍有可能造成恶意滥用。我们已经查看了实体框架,并且非常喜欢它提供的内容,但是我可以说,在这种情况下,当我们处于应用程序级别时,它将无法使用。

似乎我无法得出“正确”的结论。那么,什么是对的?

3 个答案:

答案 0 :(得分:3)

WebServices听起来像是一种正确的方法。在Web服务层上实现面向SOA的层可以让您对数据库服务器上的数据发生的情况进行大量控制。

对于重复呼叫造成任何损害,我并不完全怀疑 - 首先,您可以拥有每个呼叫的审核日志,以便检测可能的误用是显而易见的。但您也可以实现基于角色的安全性,以便将Web服务方法暴露给角色中的用户,这意味着并非每个人都能够调用任何方法。

您甚至可以使用表单身份验证来保护您的Web服务,以便对任何数据源(而不仅仅是活动目录)进行身份验证。

最后,应用程序本身可以作为ClickOnce应用程序发布,以便从网页下载和执行它,并在发布新版本时自动更新。

如果您需要一些技术指导,我在几年前发表了博客:

http://netpl.blogspot.com/2008/02/clickonce-webservice-and-shared-forms.html

答案 1 :(得分:1)

我的建议是,因为你是绿地,就是使用Servicestack的API包装器方法。

退房:http://www.servicestack.net/ServiceStack.Northwind/

这样做可以使用servicestack身份验证,抽象出你的数据库层(因为你可以移动到不同的数据库提供者,更改其位置,为工作项提供队列等等)并及时将你的整个基础设施移动到内部Intranet应用程序。

Plus Servicestack非常快,几乎可以与您通过的任何协议互操作,并提供通过MONO运行它,因此您不会遇到可能非常昂贵的MS后端。

我的两分钱。 :)

答案 2 :(得分:0)

首先,这个问题对于StackOverflow来说是不合适的,你可能会很快得到近距离投票。

其次,您可能需要查看WCF RIA Services

这些将允许您为所有实体创建基本的CRUD操作,以及类似的东西。 我自己从未使用过这个,不,我不确定潜在的问题是什么。

否则,就做我们做的事情:

创建通用(<T>)接口和服务以及合同和所有内容。这将允许您将服务,DAO,ViewModel等中的CRUD功能调整为任何实体类型。