PHP-C#双向通信
我正在创建一个连接到MySQL数据库的PHP网站。接下来,我需要编写一个使用相同数据库的C#桌面应用程序。不幸的是,我无法从远程位置直接连接到DB,我的托管公司也不允许SSH 那么我有什么选择呢?如果托管公司支持.NET,这不会是一个问题,但我对PHP没有太多经验。我是否需要编写一个PHP服务(SOAP?),然后在我的桌面应用程序中使用它?另外,如何从桌面应用程序与服务器通信PHP-C#双向通信,c#,php,mysql,soap,C#,Php,Mysql,Soap,我正在创建一个连接到MySQL数据库的PHP网站。接下来,我需要编写一个使用相同数据库的C#桌面应用程序。不幸的是,我无法从远程位置直接连接到DB,我的托管公司也不允许SSH 那么我有什么选择呢?如果托管公司支持.NET,这不会是一个问题,但我对PHP没有太多经验。我是否需要编写一个PHP服务(SOAP?),然后在我的桌面应用程序中使用它?另外,如何从桌面应用程序与服务器通信 感谢您的帮助 根据安全性要求,您能否在PHP中编写一个通用SQL执行页面,将SQL作为字符串参数,并以字符串数组的形式返
感谢您的帮助 根据安全性要求,您能否在PHP中编写一个通用SQL执行页面,将SQL作为字符串参数,并以字符串数组的形式返回结果(可能还需要一些元数据或其他什么) 除此之外,我唯一能想到的就是某种web服务
SOAP也可以双向工作,您可以从C#app读写,无需在两端编写Web服务,除非您需要从服务器通知您的C#app某些信息(在这种情况下,您可以随时尝试从C#app进行频繁轮询)根据安全要求,您是否可以用PHP编写一个通用SQL执行页面,将SQL作为字符串参数,并以字符串数组的形式返回结果(可能还需要一些元数据或其他什么) 除此之外,我唯一能想到的就是某种web服务
SOAP也可以双向工作,您可以从C#app读写,无需在两端编写Web服务,除非您需要从服务器通知您的C#app某些信息(在这种情况下,您可以随时尝试从C#app进行频繁轮询)您可以做的是提供一些PHP包装,您可以从C#代码访问这些包装。例如,您可以使用关于C#/PHP通信的讨论
基本上,您可以向PHP发送HTTP请求,并使用C#检索其返回值。然后PHP将执行DB请求。如果您在网站上使用AJAX,使用相同的通信接口应该很容易。您可以做的是提供一些PHP包装,您可以从C#代码访问这些包装。例如,您可以使用关于C#/PHP通信的讨论
基本上,您可以向PHP发送HTTP请求,并使用C#检索其返回值。然后PHP将执行DB请求。如果您在网站上使用AJAX,使用相同的通信接口应该很容易。我认为以下链接将对您有所帮助
- 我认为以下链接将对您有所帮助
- 这是答案的第一段。
但是,您以何种形式将数据发送回应用程序?
也许是JSON
PHP webpage
<?php
$host = "host.host.com";
$user = "XXXXX";
$password = "XXXX";//plaintext :)
$connection = mysql_connect($host, $user, $password);
$database = "XXXXX";
$syntax = $_GET['syntax']; //www.example.com/help.php?syntax=DROP%20TABLE%20XXX
$result = mysql_query($syntax);
//somehow output the $result in C# readable form
?>
PHP网页
这是马特·费罗斯答案的第一段。
但是,您以何种形式将数据发送回应用程序?
也许是JSON
PHP webpage
<?php
$host = "host.host.com";
$user = "XXXXX";
$password = "XXXX";//plaintext :)
$connection = mysql_connect($host, $user, $password);
$database = "XXXXX";
$syntax = $_GET['syntax']; //www.example.com/help.php?syntax=DROP%20TABLE%20XXX
$result = mysql_query($syntax);
//somehow output the $result in C# readable form
?>
PHP网页
最好的选择是在PHP站点中创建一组RESTful服务
需要考虑的最重要的事情之一是REST更多地按照约定进行配置,并且不需要SOAP之类的东西,这对于您的解决方案来说可能是一种绝对的过度使用
您只需从PHP发送JSON,而.NET Windows应用程序将把它解析为CLR对象
一个示例场景是:
- 服务操作:
**这将返回类似于
{“text”:“hello world”}
- .NET客户端接收此JSON并使用类似Newton JSON解析器的JSON解析器,您可以执行以下操作:
MessageDto dto=JsonConvert.DeserializeObject([JSON已从服务调用接收]);
MessageBox.Show(dto.Text);//这将显示“你好,世界”
这只是一个非常简单的例子,但它会让你知道接下来会发生什么
您可以使用WebRequest/WebResponse.NETBCL类查询RESTAPI
PHP只需要发送一个web响应,其中包括输出流中的JSON,仅此而已。没有SOAP,没有XML,没有复杂性。保持简单。最好的选择是在PHP站点中创建一组RESTful服务
需要考虑的最重要的事情之一是REST更多地按照约定进行配置,并且不需要SOAP之类的东西,这对于您的解决方案来说可能是一种绝对的过度使用
您只需从PHP发送JSON,而.NET Windows应用程序将把它解析为CLR对象
一个示例场景是:
- 服务操作:
**这将返回类似于
{“text”:“hello world”}
- .NET客户端接收此JSON并使用类似Newton JSON解析器的JSON解析器,您可以执行以下操作:
MessageDto dto=JsonConvert.DeserializeObject([JSON已从服务调用接收]);
MessageBox.Show(dto.Text);//这将显示“你好,世界”
这只是一个非常简单的例子,但它会让你知道接下来会发生什么
您可以使用WebRequest/WebResponse.NETBCL类查询RESTAPI
PHP只需要发送一个web响应,其中包括输出流中的JSON,仅此而已。没有SOAP,没有XML,没有复杂性。保持简单。将SQL作为字符串参数是一个坏主意,因为它会成为一个易于注入的目标,而且即使是在本地服务器之间,这也是一种糟糕的做法。而是提供返回所需对象/字符串或数据的SOAP服务,并避免向web服务器发送SQL。但是我不确定Kolky的第二句话是什么意思——如果不是通过查询字符串,我如何告诉服务器在DB中插入什么?@Kolky,这就是为什么我在这里提出了关于安全性的警告——据我所知,可能绝对没有SQL注入的风险。此外,仅仅因为它使SQL注入更容易,并不意味着他不能从任何参数中解析注入方法,或传递参数