我目前正处于规划阶段,对我们的核心(商业)软件产品进行了相当全面的重写,我正在寻找一些建议。
我们当前的软件是一个用Winforms编写的业务管理包(最初在.NET 2.0中,但到目前为止已转换为4.0),它直接与SQL Server后端通信。还有一个非常简单的ASP.NET Webforms网站,为旅途中的用户提供一些基本功能。我们的每个客户都必须向全世界公开这个网站(以及一些现有的ASMX网络服务)才能使用它,我们开始不再适应这种设置。
当我们改写这个软件包时,我们已经决定最好是从外部更容易访问软件包,并为我们的客户提供允许我们托管他们数据的选项(我们还没决定)在提供商上)而不是要求他们在内部托管SQL Server,SQL Server Reporting Services和IIS。
目前,我们的计划是使用WPF重写现有的Winforms应用程序,并通过Web提供更丰富的客户端体验。然而,展望未来,我们的客户表示有兴趣使用平板电脑,因此我们也需要支持iOS和Android原生应用程序作为客户端。
我们希望提供非现场托管(无需使用VPN架构)以及支持.NET生态系统之外的平台上的客户端,这使我们得出所有客户端 - 服务器通信的结论应该通过我们自己的服务而不是使用SQL Server客户端进行(因为我们不希望将它暴露给全世界,并且据我所知,对于某些平台,SQL Server驱动程序不存在。)
现在,我看到它们的选项是:
我的基本问题是:
答案 0 :(得分:2)
(我正在假设“有状态”是指基于会话的)。
我想一个大问题是:你想在你的消息堆栈中使用SOAP吗?
您可能不愿意,因为在移动平台上通常没有对SOAP的开箱即用支持(请参阅:How to call a web service with Android)。毫无疑问它与iOS同样痛苦。从浏览器(“ASP.NET”)调用SOAP并不好玩。我甚至不确定它是否可能!
不幸的是,如果您不使用SOAP,那么很快就会排除大多数WCF标准绑定。剩下的那个,“Web HTTP”,不支持会话,因为很明显HTTP是无状态协议。您实际上可以使用解决方案based on Cookies手动添加会话支持。
您可以使用TCP传输(它支持会话),并构建您自己的通道堆栈以支持非SOAP编码(例如protocol-buffers),但即使这样您也需要小心,因为TCP传输在其中放置特殊的“框架”字节,这样就可以使互操作变得非常重要。
您需要在会话中存储哪种状态?也许有其他方法?
答案 1 :(得分:0)
1)考虑使用单例的有状态实用程序服务,但保持外观级别的请求/响应模式无状态。 2)考虑分布式缓存,也许是Windows Server AppFabric Cache。