繁体   English   中英

在WCF中创建有状态客户端 - 服务器体系结构

[英]Creating a stateful client-server architecture in WCF

我目前正处于计划阶段,对我们的一个核心(商业)软件产品进行了相当全面的重写,我正在寻找一些建议。

我们当前的软件是一个用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驱动程序不存在,对于某些平台而言)。

现在,我看到他们的选择是:

  • 编写一个完全自定义的服务,使用TCP套接字并从头开始编写所有内容(身份验证,会话管理,序列化等)。 这是我最了解的 ,但我的假设是有更好的东西。
  • 使用WCF服务进行传输,自己负责身份验证和/或会话管理,或者使用类似持久服务的会话管理

我的基本问题是:

什么是最合适的整体架构选择,以及ASP.NET身份验证或持久服务等特定功能,为WPF,ASP.NET,iOS和Android客户端提供有状态的持久服务?

(我正在假设“有状态”是指基于会话的)。

我想一个很大的问题是:你想在你的消息堆栈中使用SOAP吗?

您可能不喜欢,因为在移动平台上通常没有对SOAP的开箱即用支持(请参阅: 如何使用Android调用Web服务 )。 毫无疑问它与iOS同样痛苦。 从浏览器(“ASP.NET”)调用SOAP并不好玩。 我甚至不确定它是否可能!

不幸的是,如果您不使用SOAP,那么很快就会排除大多数WCF标准绑定。 剩下的那个,“ Web HTTP ”,不支持会话,因为很明显HTTP是无状态协议。 您实际上可以使用基于Cookie的解决方案手动添加会话支持。

您可以使用TCP传输(它支持会话),并构建您自己的通道堆栈以支持非SOAP编码(例如协议缓冲区 ),但即使这样您也需要小心,因为TCP传输会放置特殊的“框架”在其中的字节,这将使互操作非平凡。

您需要在会话中存储哪种状态? 也许有其他方法?

1)考虑使用单例的有状态效用服务,但保持门面级别的请求/响应模式无状态。 2)考虑分布式缓存,也许是Windows Server AppFabric Cache。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM