C# 从单用户桌面应用程序转向多用户开发

C# 从单用户桌面应用程序转向多用户开发,c#,multi-user,C#,Multi User,我想在晚上和周末启动一个微型ISV。我在开发的早期阶段有一个应用程序。它是用C#编写的,主要由一组表示问题域的类组成。此时,没有UI或数据持久性。(我甚至还没有决定使用.NET平台。现在我可以换成Java或本机可执行文件已经足够早了) 我对这个应用程序的目标是,它将是一个混合的单用户/偶尔连接的多用户应用程序。单用户部分将使用嵌入式数据库进行本地存储。这是我熟悉的一种开发模式 多用户部分是我以前没有的经验。我知道每个用户都需要两件事: 与公共internet上远程服务器的基于IP的通信 用户身

我想在晚上和周末启动一个微型ISV。我在开发的早期阶段有一个应用程序。它是用C#编写的,主要由一组表示问题域的类组成。此时,没有UI或数据持久性。(我甚至还没有决定使用.NET平台。现在我可以换成Java或本机可执行文件已经足够早了)

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

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

  • 与公共internet上远程服务器的基于IP的通信

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

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

  • 哪种技术是实现上述两件事的最简单方法?直接访问数据存储/数据库还是隔离它更好?我应该实现Web服务吗?如果是,用肥皂还是休息

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


    1.直接访问数据库是最简单的,也是最差的。想想你是如何授权数据库访问的。。。我只需要编写一个带有可序列化参数的远程可编程API,然后担心以后要连接哪些方法(web服务、IIOP等等)——通信细节都是包装和隐藏的


    2.无

    如果您坚持使用.net(我个人的偏好),我会通过WCF公开数据访问呼叫。WCF配置非常灵活,非常容易获取,并且您希望将数据库隐藏在服务层后面。

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

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

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

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

    sql azure?