我目前正在计划对我们其中一个核心商业软件进行全面重写,需要一些建议。
我们目前的软件是一个Winforms编写的业务管理软件(最初是在.NET 2.0上编写的,但已经过渡到4.0),直接与SQL Server后端通信。还有一个非常简单的ASP.NET Webforms网站,为用户提供基本功能。每个客户都必须将此站点(以及几个现有的ASMX web服务)暴露给外界才能使用它,而我们开始超越了这种设置。
随着我们重写这个软件包,我们已经决定最好使软件包更容易从外部访问,并为我们的客户提供让我们托管他们的数据(我们尚未确定提供程序)的选项,而不是要求他们在场地上托管SQL Server、SQL Server Reporting Services和IIS。
现在,我们的计划是使用WPF重写现有的Winforms应用程序,并在Web上提供更丰富的客户端体验。然而,未来,我们的客户表示有兴趣使用平板电脑,因此我们需要支持iOS和Android本机应用程序作为客户端。
我们希望提供远程托管(而不必使用VPN架构)并支持.NET生态系统之外的平台上的客户端,这导致我们得出结论:所有客户端-服务器通信都应通过我们自己的服务进行,而不是使用SQL Server客户端(因为我们不想将其暴露给外界,而且据我所知,某些平台没有SQL Server驱动程序)。
现在,我认为我们的选择有:
- 编写完全定制的服务,使用TCP套接字并从头编写所有内容(身份验证、会话管理、序列化等)。这是我最了解的,但我的假设是有更好的选择。
- 使用WCF服务进行传输,并自己处理身份验证和/或会话管理,或者使用像持久服务这样的东西来进行会话管理
我的基本问题是:
WCF
,而不是WPF
。至于有状态,我认为不需要太多。基本上只需要能够验证发送者并可能能够在调用之间维护一些会话信息。我认为这不会很多,但客户端当前的一些内容将在服务器上(为了跨平台的一致性),我希望确保我们不会束缚自己。 - Adam Robinson