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

标签 c# asp.net android wcf ios

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

我们当前的软件是用 Winforms(最初是 .NET 2.0,但目前已过渡到 4.0)编写的业务管理包,它直接与 SQL Server 后端通信。还有一个非常简单的 ASP.NET Webforms 网站,为旅途中的用户提供一些基本功能。我们的每个客户都必须向全世界公开此网站(以及一些现有的 ASMX 网络服务)才能使用它,而我们开始超越这种设置。

当我们重写这个包时,我们决定最好让这个包更容易从外部访问,并为我们的客户提供允许我们托管他们的数据的选项(我们还没有决定在提供商上),而不是要求他们在本地托管 SQL Server、SQL Server Reporting Services 和 IIS。

目前,我们的计划是使用 WPF 重写现有的 Winforms 应用程序,并通过 Web 提供更丰富的客户端体验。然而,展望 future ,我们的客户表示有兴趣使用平板电脑,因此我们也需要支持 iOS 和 Android native 应用程序作为客户端。

我们希望提供场外托管(无需使用 VPN 架构)并支持 .NET 生态系统之外的平台上的客户端,这使我们得出结论,我们所有的客户端-服务器通信应该通过我们自己的服务而不是使用 SQL Server 客户端进行(因为我们不想将其暴露给世界,而且据我所知,对于其中一些平台,SQL Server 驱动程序不存在)。

目前,我认为我们的选择是:

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

我的基本问题是:

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

最佳答案

(我假设“有状态”是指基于 session )。

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

您可能不愿意,因为在移动平台上通常没有对 SOAP 的开箱即用支持(请参阅:How to call a web service with Android)。毫无疑问,iOS 也同样令人痛苦。从浏览器(“ASP.NET”)调用 SOAP 一点也不好玩。我什至不确定它是否可能!

不幸的是,如果您不使用 SOAP,那么很快就会排除大多数 WCF 标准绑定(bind)。在剩下的“Web HTTP”中,不支持 session ,因为显然 HTTP 是一种无状态协议(protocol)。您实际上可以使用解决方案手动添加 session 支持 based on Cookies .

您可以使用 TCP 传输(它支持 session ),并构建您自己的 channel 堆栈以支持非 SOAP 编码(例如 protocol-buffers ),但即便如此您也需要小心,因为 TCP 传输有特殊的地方在其中“构建”字节,这样会使互操作变得非常重要。

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

关于c# - 在 WCF 中创建有状态的客户端-服务器体系结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5914978/

相关文章:

c# - LINQ 与 C# 中的相交方法

c# - 提醒用户注意新记录

c# - 是否可以在asp.net中序列化/反序列化Session对象

java - 注销我的应用程序时出现问题。应用程序不断崩溃

java - 如何使用 SAX Parser for Java 一次从一组 URL 解析多个 XML 提要?

c# - 在 mvc 4 中找不到 DbContext

c# - 为什么 Clipboard.GetText 不起作用?

c# - 无法将类型 'Transaction' 隐式转换为 System.Collection.GenericList<Transaction>

c# - 如何显示可下载链接

android - Facebook 请求不等待用户输入