c# - C# 桌面应用程序、移动应用程序和 SQL 服务器之间的实时更新

标签 c# sql-server mobile signalr

谁能解释一下我目前正在研究的多应用解决方案的最佳通信流程实践。我将运行一个 MS SQL 服务器数据库。该数据库将被一个或多个 Windows 桌面应用程序和移动设备(android、iOS 和 Windows)访问和更新。每当对数据库进行任何更改时,客户端都应实时更新以反射(reflect)出来。桌面应用程序是最重要的,需要尽可能少地延迟更新。另一方面,移动应用可以容忍一分钟左右的延迟。

我的想法是使用 signalR 将桌面应用程序连接到服务器,然后数据库将通过 SQLDependency 将更新通知任何连接的客户端。对于移动端,我计划让服务器向移动设备发送通知,在收到通知后,移动设备将重新查询 SQL Server(通过 Web 服务)以更新自身。

我想我的问题是,这是解决此问题的最佳(标准)方法还是有更好/更快/更稳健的方法来实现此目的。

如有任何建议,我们将不胜感激。

最佳答案

我建议您在 C# 中创建一个 API 并在 IIS 上托管。然后,您的桌面应用程序(无论是 Web 应用程序还是 native 应用程序)将使用 RESTful 调用 API。

托管在 IIS 上的 API 将与 SQL Server 通信。对于数据库操作,您将拥有 CRUD(创建、读取、更新、删除)。您将向每个 CRUD 方法公开一个 GUID(在 sql server 中使用 NEWID() 生成)并提供序列化数据。例如。可能是 XML 或 JSON POST 到 API。

在我看来(和实践),这是最佳选择。它是真正的全局性的,API 可以与任何能够发出 HTTP 请求的客户端应用“对话”。

所以系统变成:

SQL Server > API/IIS > 客户端(Android、iOS、JS、Java、Windows、Unix、Mac 等)

这里的好处还有:

  1. 开箱即用的 SSL
  2. RESTful 交易 - 可以使用 oAuth 或自己编写(专有的更难破解!)
  3. 高度可扩展 - IIS 支持每秒 100 个事务
  4. 不需要向网络开放端口 1433(SQL 端口)(这会让您遭受黑客攻击)。 API 使用端口 443 (HTTPS)
  5. 如果您使用 C# 编写您的 API,您有许多开箱即用的序列化/反序列化函数。

希望这能回答您的问题。

关于c# - C# 桌面应用程序、移动应用程序和 SQL 服务器之间的实时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43738899/

相关文章:

c# - 在 C# Webclient 类输出中

c# - 如何制作字符串“,”?

sql - 在 SQL Server 2008 中跨列返回最大值

android - CSS "display:block"不适用于 Chrome for Android

css - 移动 CSS 是唯一显示的 CSS……即使在桌面上也是如此

c# - Dapper 如何通过 DynamicParameter.Get 处理 DBNull

c# - 使用 asp.net mvc 上传多个文件/文件路径

SQL 服务器 : splitting a column to multiple columns with joined table

mysql - 在 SSMS 中创建到远程服务器上的 MySQL 数据库的链接服务器

JavaScript visibilitchange 事件不会在移动 Chrome 上触发