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

时间:2017-05-02 13:15:50

标签: c# sql-server mobile signalr

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

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

我想我的问题是,这是最好的(标准)方式,还是有更好/更快/更强大的方法来实现这一目标。

任何建议都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

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

在IIS上托管的API将与SQL Server进行通信。对于数据库操作,您将拥有CRUD(创建,读取,更新,删除)。您将向每个CRUD方法公开GUID(使用sql server中的NEWID()生成)并提供序列化数据。例如。可能是XML或JSON发布到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端口)到Web(这会打开你的黑客攻击)。 API使用端口443(HTTPS)
  5. 如果您使用C#编写API,则可以使用许多序列化/反序列化功能。
  6. 希望这能回答你的问题。