2010-09-11 20 views
4

我试图在我的夜晚和周末引导微型ISV。我的应用程序处于开发的很早阶段。它用C#编写,主要由表示问题域的类集合组成。此时没有UI或数据持久性。 (我甚至没有在.NET平台上解决,它足够早,我可以更改为Java或本机可执行文件)从单用户桌面应用转向多用户开发

我的这个应用程序的目标是它将是一个混合单用户/偶尔连接的多用户应用程序。单用户部分将使用嵌入式数据库进行本地存储。这是我熟悉的开发模式。

多用户部分是我没有任何经验的地方。我知道每个用户需要两件事情:

  • 基于IP的通信在公共互联网上的远程服务器

  • 用户认证和远程数据存储

我有一个想法我希望此服务器提供哪些服务(信息查找和用户到用户交易),但除此之外,我不在我的元素之内。服务器需要由第三方托管,因为我没有资源来运行我自己的服务器。请记住,我将是这个项目的可预见的未来的唯一开发商:

  1. 何种技术来实现上面提到的两件事情最简单的方法是什么?直接访问数据存储/数据库还是隔离它更好?我应该实现一个web服务吗?如果是这样,SOAP还是REST?

  2. 移动到多用户应用程序时需要考虑什么其他事情? 我知道在多用户应用程序中安全性是一个更大的问题。特别是当你处理任何种类的银行信息(我会)。处理远程连接和大量用户时,性能可能会成为问题。还有什么我可以忽略的?

+0

sql-azure? http://www.microsoft.com/windowsazure/sqlazure/ – 2010-09-11 16:49:08

回答

0

1.直接访问数据库是最简单的,也是最差的。考虑一下你如何验证数据库访问......我只需编写一个具有可串行参数的可远程调用的API,并担心稍后要连接哪些方法(Web服务,IIOP等) - 通信细节全部包装无论如何都隐藏着。

2.none

1

如果您正在使用.NET(我的个人偏好)坚持,我会暴露通过WCF数据访问的。 WCF配置非常灵活且非常容易上手,并且您希望将数据库隐藏在服务层后面。

2

关于迁移到多用户应用程序,集中您的数据是当然的第一步,实现它的最简单方法通常是使用基于云的数据库,例如Amazon SimpleDB或MS Azure。您通常会获得访问密钥和长时间的“秘密”进行身份验证。

如果您的数据不是高度关联的,您可能需要考虑Amazon SimpleDB。大多数语言都有SDK,它们允许简单的代码在世界任何地方使用密钥和秘密在SimpleDB数据库中存储/检索数据。您根据您的数据存储和流量来支付服务费用,因此它的入门门槛非常低,特别是在开发期间。它也将从一个微小的家庭应用程序扩展到amazon.com的大小。

如果你选择来实现自己的数据库服务器,你应该记住两个关键的东西:

  1. 确保没有会话状态存在,即客户端发出调用Web服务,一些动作发生,并且服务器会忘记该客户端(除了数据库中的任何更改的数据外)。同样,客户端不应该保留任何本地数据,这些数据可能会因另一个用户的交互而发生变化。只在本地缓存你知道的数据不会改变(或者你不关心它是否改变)。
  2. 对于Web服务,每个调用通常都会在其自己的线程上处理,因此您需要确保从多个线程访问数据库是安全的。如果您使用标准的.NET或Java方式与SQL数据库交谈,应该为您处理。但是,如果您实施自己的数据存储,那么您需要担心的是。

关于REST/SOAP等问题,一个关键的考虑因素应该是你想用什么平台/设备连接到数据库服务器。例如,如果你在.NET中实现你的服务器,你可能会考虑WCF实现你的Web服务。但是,如果您稍后想要使用非.NET客户端,则可能会带来困难。 SOAP是一种用于Web服务的成熟技术,但实现起来相当繁琐,并且用于结束SOAP调用处理的库可能不一定适用于给定的客户端平台。 REST很容易实现(如果你在你的服务器上使用ASP.NET MVC,这很简单),任何可以处理HTTP POST/GET的客户端都可以访问,而且不需要库,而且容易测试,所以REST将成为我的首选技术。