从单用户桌面应用程序迁移到多用户开发

时间:2010-09-11 16:34:40

标签: c# multi-user

我正在尝试在我的夜晚和周末引导微型ISV。我有一个应用程序在很早的开发阶段。它是用C#编写的,主要由表示问题域的类集合组成。此时,没有UI或数据持久性。 (我甚至还没有选择.NET平台。它足够早,我可以改为Java或本机可执行文件)

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

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

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

  • 用户身份验证和远程数据存储

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

  1. 哪种技术是实现上述两件事的最简单方法?直接访问数据存储区/数据库还是更好地隔离它?我应该实施网络服务吗?如果是这样,SOAP还是REST?

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

3 个答案:

答案 0 :(得分:2)

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

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

如果你确实选择实现自己的数据库服务器,你应该记住两件关键的事情:

  1. 确保不存在会话状态,即客户端调用您的Web服务,发生某些操作,服务器忘记该客户端(当然,除了数据库中的任何更改数据)。类似地,客户端不应该持有本地可能因其他用户的交互而发生变化的任何数据。仅在本地缓存您知道的数据不会更改(或者您不关心它是否会发生变化)。
  2. 对于Web服务,每个调用通常都在其自己的线程上处理,因此您需要确保从多个线程访问数据库是安全的。如果您使用标准的.NET或Java方式与SQL数据库进行通信,则应该为您处理。但是,如果您实现自己的数据存储,那么您将需要担心这一点。
  3. 关于REST / SOAP等问题,关键考虑因素应该是您想要使用哪种平台/设备连接到数据库服务器。例如,如果您在.NET中实现服务器,则可能会考虑使用WCF来实现Web服务。但是,如果您以后想要使用非.NET客户端,则可能会带来困难。 SOAP是一种用于Web服务的成熟技术,但实现起来相当繁琐,并且包含SOAP调用处理的库可能不一定适用于给定的客户端平台。 REST很容易实现(如果你在服务器上使用ASP.NET MVC,很容易),任何可以处理HTTP POST / GET而不需要库的客户端都可以访问,并且易于测试,所以REST将是我的首选技术

答案 1 :(得分:1)

如果您坚持使用.net(我的个人偏好),我会通过WCF公开数据访问调用。 WCF配置非常灵活,非常容易上传,您可能希望将数据库隐藏在服务层之后。

答案 2 :(得分:0)

1.直接访问db是最简单的,也是最差的。想想你如何授权db访问...我只想编写一个带有可序列化参数的远程API,并担心以后连接哪些方法(Web服务,IIOP,无论如何) - 通信详细信息都包装好了无论如何都是隐藏的。

2.none