C#桌面客户端连接远程MySQL数据库的最佳方式是什么?

3
我正在学习c#,并编写一个Windows客户端,用于收集计算机的温度数据,并需要将其发送到远程Linux mySQL数据库。
虽然我本来想直接在c#客户端中进行编程,但我想了解更多的方法并获得经验。而且直接编程可能不够安全,很可能需要额外的连接器。
你们能否建议我其他的方法,或者你们会如何处理这个问题?
  • 是否有任何一种方法可以在我的Linux MySQL服务器上编写一个作为Web服务的C#程序?我应该在哪里查找/搜索以了解更多信息。它被称为特殊的东西吗?或者可能不是用C#编写的?

  • 我应该编写一个接受来自我的C#桌面客户端的HTTP SEND/GET请求的PHP脚本吗?

  • 还有其他方法吗?

在现实世界中,哪种方式最“专业”?我正在尝试自学!:D
格式:
  • Windows桌面:客户端用C#编写,检索温度数据并需要发送到服务器
  • Linux服务器:运行Apache和MySQL服务器,已设置好数据库。关闭对外部连接。
3个回答

2
我的建议是建立一个Web服务来与您的Windows客户端进行通信。如果MySQL服务器和客户端都在同一局域网内,直接连接MySQL服务器是可以的。但是,如果不在同一局域网内,例如您的Windows客户端在各处旅行甚至MySQL服务器仅允许本地传入连接,则应该设置Web服务。此外,HTTP连接通常可以穿过防火墙,而其他端口的连接则被阻止。
PHP是一个很好的实现方式。既然您正在学习C#,您可能希望使用C#来进行服务器端编程,那么为什么不试试Mono呢?

1

强烈不建议直接将MySQL服务器暴露在互联网上,此外,这会给您提供一组相当粗略的访问权限,可能不足以满足您的应用程序需求,因此运行某种类型的服务器应用程序是正确的方法。

  • 使用mono,您可以在Linux服务器上运行很多基于.Net(因此是C#)的代码。经验法则是:如果它没有Winforms GUI和P/Invoke,那么它将正常工作。当然,这需要服务器上的mono,在大多数商业主机上都不提供。
  • 在PHP中运行服务器使其更加便携,但会有性能开销。此外,它不允许实现一些业务逻辑对象并在两端使用DLL程序集。
  • 至于协议:选择你的毒药。再次经验法则是,预定义的协议(如SOAP)往往需要更多的工作(以及在第一次学习时需要更多的学习),但从长远来看往往更加稳健。

对于您的特殊用例,我个人会选择一个快速的基于PHP的解决方案,其中协议只是带有几个参数的简单GET请求,其中一个参数是温度,其他参数用于验证客户端。


谢谢 :) 我想指出,我想每天发送大约300个潜在的传输,可能是在同一时间。如果有什么变化,我会考虑你的事件建议。那么,PHP是否仍然足够?明天还要看一下mono。只是想知道明天开始研究的方向。 - user1120389
300个5位数字的值是1500字节的有效负载,使用JSON和打包不到4K - 我完全没有看到PHP性能方面的问题。即使是一个查询字符串“temp1=123.456&temp2=234.567&...”也足够好了。不过最好使用POST方法。 - Eugen Rieck

0
如果温度传感器产生事件,那么我会将数据从Windows桌面推送到Linux桌面 - 这样可以避免后者经常检查并发现没有更新。但是,如果您只是在采集温度样本,我建议从Linux机器中'拉'数据。无论哪种方式,如果您想使用HTTP,则需要在两端都安装Web服务。
或者,您可以直接从C#远程连接到MySQL数据库,并直接写入数据(这样不需要Web服务)。这可能是最快的使其正常工作的方法。
“哪种方法更专业”的问题是主观的 - 上述三个选项都可以。只需使代码清晰简明即可 :)

你可以使用胖客户端将传感器的 MO 从轮询更改为事件:只需在本地轮询它,仅当读数发生变化时才将其推送到服务器。 - Eugen Rieck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接