2011-12-19 2 views
1

Я создаю сайт PHP, подключенный к базе данных MySQL. Затем мне нужно будет написать настольное приложение C#, которое будет использовать тот же БД. К сожалению, я не могу напрямую подключиться к БД из удаленного места, и моя хостинговая компания не разрешит SSH.PHP-C# двусторонняя связь

Итак, какие у меня варианты? Если хостинговая компания поддерживает .NET, это не будет проблемой, но я не настолько разбираюсь в PHP. Должен ли я написать PHP-сервис (SOAP?), А затем использовать его в своем настольном приложении? Кроме того, как мне взаимодействовать с сервером из настольного приложения?

Любая помощь оценена!

ответ

3

В зависимости от требований безопасности вы могли бы написать общую страницу выполнения SQL в PHP, которая взяла SQL как параметр String и вернула результаты в виде массива строк (возможно, нужны некоторые метаданные или что-то еще)?

Помимо этого единственное, что я могу придумать, это веб-сервис.

Также SOAP может работать в обоих направлениях, вы можете читать и писать из приложения C#, не нужно писать WebService на обоих концах, если вам не нужно уведомлять приложение C# о чем-то с сервера (в этом случае вы могли бы всегда старайтесь часто проводить опрос с помощью приложения C#)

+1

Наличие SQL как параметра String - плохая идея, поскольку это сделает легкую мишень для инъекций, и это просто плохая практика, даже если она находится между локальными серверами. Скорее поставляйте SOAP-сервисы, которые возвращают требуемые объекты/строки или данные и не отправляют SQL на ваш веб-сервер. – Kolky

+1

Мне нравится этот ответ лучше всего, однако я беспокоюсь об инъекции, как заметил Колки. Но тогда я не уверен, что Колки означает по второму предложению - как я могу сказать серверу, что вставить в БД, если не по строкам запроса? – jkottnauer

+0

@Kolky Вот почему я поставил оговорку о безопасности там - не может быть абсолютно никакого риска SQL-инъекции для всего, что я знаю. Кроме того, просто потому, что упрощение SQL-инъекции не означает, что он не смог разобрать методы инъекций из любых параметров или передать параметры через отдельные аргументы и применять их в качестве параметризованных запросов в самом PHP. SOAP - это боль задница откровенно, а не сама по себе, более безопасная, чем веб-страница с использованием String. –

0

Что вы можете сделать, это предоставить некоторые PHP-обертки, с которыми вы можете получить доступ с вашего кода на C#. В качестве примера вы можете использовать обсуждение this, касающееся связи C#/PHP.

В принципе, вы можете отправить HTTP-запрос на PHP и получить его возвращаемое значение с помощью C#. Затем PHP выполнил запросы БД. Если вы используете AJAX на веб-сайте, вам должно быть легко использовать одни и те же коммуникационные интерфейсы.

-1

это первый абзац Matt Fellows ответа. Но в какой форме вы отправляете данные обратно в приложение? Может быть, 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 

?> 
+0

csv, xml, json - выберите ваш выбор. Все три из них имеют библиотеки в C# .net для их разбора. –

3

Лучшим вариантом будет создание набора сервисов RESTful на вашем сайте PHP.

Одна из самых важных вещей, которые следует учитывать, это REST, более конфигурируемая по соглашению, и нет необходимости в таких вещах, как SOAP, которые могут быть абсолютным излишеством для вашего решения.

Вы просто отправляете JSON из PHP и .NET. Приложение Windows будет анализировать его как объект CLR.

Сценарий образец будет:

  • работы Услуги: http://yourdomainhere.com/API/Message/34894 ** Это возвращает что-то вроде { "text": "hello world" }
  • .NET клиент получает этот JSON и используя JSON парсер, как Ньютон JSON парсер, вы бы это сделать:

    MessageDto DTO = JsonConvert.DeserializeObject ([JSON, полученных от вызова службы]); MessageBox.Show (dto.Text); // Это покажет «hello world»

Это просто очень простой пример, но это даст вам представление о том, что будет дальше.

Вы можете запросить свой REST API с помощью классов WebRequest/WebResponse .NET BCL.

PHP должен только отправить веб-ответ, включая JSON, в выходной поток, вот и все. Нет SOAP, без XML, без осложнений. Будь проще.

Смежные вопросы