2016-12-31 4 views
2

Momentan speichere ich meine C# mysql Verbindungsinformationen innerhalb der Klassendatei selbst, was nicht so schlau aussieht, da Endbenutzer einfach einen Reflektor wie NET Reflector verwenden könnten, um den Quellcode zu debuggen Fall ist es nicht verstellt.Verwendung von PHP Webservice in winforms Anwendung

Jetzt wird ein Benutzer auf Stackoverflow empfohlen, einen Webdienst zu erstellen, der die Datenbank manipuliert. Die Software, die der Endbenutzer verwenden würde, authentifiziert sich dann einfach mit dem Webdienst unter Verwendung der Anmeldeinformationen des Benutzers und greift dann auf Ressourcen zu.

Jetzt habe ich das folgende Problem, Mein Server läuft auf Linux Ubuntu und speichert bereits eine Website, die mit Plesk erstellt wurde.

Ich weiß, dass ich http://www.mono-project.com/ verwenden konnte, um einen Webservice unter Linux zu hosten. Aber ich habe das nie gemacht, seit ich PHP immer benutzt habe, um solche Dinge zu tun, und ich bin irgendwie verwirrt darüber, wie man einen C# -Web-Dienst auf die installierte Mono-Version auf dem SSH-Server hochlädt.

Könnte ich etwas wie den folgenden PHP-Code als C# -Webdienst in meiner winforms-Anwendung verwenden?

PHP-Code:

<?php 
    class webService extends database 
    { 
     // Web service constructor 
     public function __construct($username, $password, $uniqueId, $versionId) 
     { 
      $this->username = $username; 
      $this->password = $password; 
      $this->salt = 'xxx'; 
      $this->hash = 'xxx'; 
      $this->uniqueId = $uniqueid; 
      $this->versionId = $versionId; 
     } 

     // Web service functions to check database values 

     // Web service user account check function 
     private function userCheck() 
     { 
      $this->connect(); 
      $userCheck = $this->execute_query("SELECT username, password FROM Users WHERE username = '" . $this->username . "' AND password = '" . $this->hash . "'"); 

      if($userCheck && mysqli_num_rows($userCheck) > 0) 
      { 
       return 'true'; 
      } 
      else 
      { 
       return 'false'; 
      } 
     } 

     // Web service unique id check function 
     private function uniqueCheck() 
     { 
      $this->connect(); 
      $uniqueCheck = $this->execute_query("SELECT username, uniqueid FROM Users WHERE username = '" . $this->username . "' AND uniqueid = '" . $this->uniqueId . "'"); 

      if($uniqueCheck && mysqli_num_rows($uniqueCheck) > 0) 
      { 
       return 'true'; 
      } 
      else 
      { 
       return 'false'; 
      } 
     } 

     // Web service first run check function 
     private function firstRunCheck() 
     { 
      $this->connect(); 
      $firstRunCheck = $this->execute_query("SELECT username, firstrun FROM Users WHERE username = '" . $this->username . "' AND firstrun = '0'"); 

      if($firstRunCheck && mysqli_num_rows($firstRunCheck) > 0) 
      { 
       return 'true'; 
      } 
      else 
      { 
       return 'false'; 
      } 
     } 

     // Web service user disabled check function 
     private function disabledUserCheck() 
     { 
      $this->connect(); 
      $disabledUserCheck = $this->execute_query("SELECT disabled FROM Users WHERE username = '" . $this->username . "' AND disabled = '1'"); 

      if($disabledUserCheck && mysqli_num_rows($disabledUserCheck) > 0) 
      { 
       return 'true'; 
      } 
      else 
      { 
       return 'false'; 
      } 
     } 

     // Web service update required check function 
     private function updateRequiredCheck() 
     { 
      $this->connect(); 
      $updateRequiredCheck = $this->execute_query("SELECT requiredupdate FROM requiredupdate WHERE version = '" . $this->versionId . "' AND requiredupdate = 1"); 

      if($updateRequiredCheck && mysqli_num_rows($updateRequiredCheck) > 0) 
      { 
       return 'true'; 
      } 
      else 
      { 
       return 'false'; 
      } 
     } 

     // Web service premium check function 
     private function userPremiumCheck() 
     { 
      $this->connect(); 
      $userPremiumCheck = $this->execute_query("SELECT premium FROM Users WHERE username = '" . $this->username . "' AND premium = 1"); 

      if($userPremiumCheck && mysqli_num_rows($userPremiumCheck) > 0) 
      { 
       return 'true'; 
      } 
      else 
      { 
       return 'false'; 
      } 
     } 

     // Web service functions to update database values 

     // Web service update first run parameters function 
     private function firstRunUpdate() 
     { 
      $firstRunCheck = $this->firstRunCheck(); 

      if($firstRunCheck == 'true') 
      { 
       $this->connect(); 
       $this->execute_query("UPDATE Users SET uniqueid = '" . $this->uniqueId . "', firstrun = '1' WHERE username = '" . $this->username . "'"); 

       return 'true'; 
      } 
      else 
      { 
       return 'false'; 
      } 
     } 

     function to_xml(SimpleXMLElement $object, array $data) 
     { 
      foreach ($data as $key => $value) { 
       if (is_array($value)) { 
        $new_object = $object->addChild($key); 
        to_xml($new_object, $value); 
       } else { 
        $object->addChild($key, $value); 
       } 
      } 
     } 

     // Web service handler function 
     public function webService() 
     { 
      $userCheck = $this->userCheck(); 

      if($userCheck == 'true') 
      { 
       $userArray = array (
        'username' => $this->username, 
        'authentificated' => $this->userCheck(), 
        'firstRun' => $this->firstRunCheck(), 
        'firstRunUpdated' => $this->firstRunUpdate(), 
        'uniqueIdCheck' => $this->uniqueCheck(), 
        'Premium' => $this->userPremiumCheck(), 
        'Disabled' => $this->disabledUserCheck(), 
        'updateRequired' => $this->updateRequiredCheck() 
       ); 
      } 
      else 
      { 
       $userArray = array (
        'username' => $this->username, 
        'userCheck' => $this->userCheck() 
       ); 
      } 

      echo str_replace("\/", "/", json_encode($userArray, JSON_PRETTY_PRINT)); 
     } 
    } 
?> 

Oder wie ist ein PHP-Web-Dienst erstellt, die in meiner Anwendung gewöhnen?


Die aktuelle Antwort von dem PHP-Skript würde wie folgt aussehen:

{ "username": "dane", "authentificated": "true", "firstRun": "false", "firstRunUpdated": "false", "uniqueIdCheck": "true", "Premium": "true", "Disabled": "false", "updateRequired": "false" } 
+0

Wenn der Dienst HTTP-Anfragen annehmen und HTTP-Antworten zurückgeben kann, dann können Sie ihn über die winforms-App aufrufen. – Crowcoder

Antwort

3

Rômulo M. Farias 'Antwort ist genau richtig.

Allerdings benötigen Sie möglicherweise ein wenig mehr Erklärung, und es kann helfen, einige Dinge "von Hand" beim ersten Mal zu tun, damit Sie verstehen, was unter der Haube passiert, wenn Sie Frameworks verwenden, um die busy-Arbeit zu tun für dich. Also ich lasse meine Antwort Stand:

...

Es sieht aus wie Sie auf dem richtigen Weg mit der Grundstruktur sind, was Sie tun möchten (MySQL Anmeldeinformationen und Zugriff behandelt werden serverseitige).

Es gibt keinen Grund, dass Sie C# auf Ihrem Server ausführen müssen, nur weil Ihre clientseitige Anwendung WinForms. Der ganze Sinn von Web Services liegt darin, dass verschiedene Plattformen einfach miteinander kommunizieren können.

Ein Webdienst kann als eine Website angesehen werden, die Daten anstelle von HTML zurückgibt. (Eigentlich ist es andersherum: Eine Website oder Webseite ist nur eine bestimmte Art von Web-Service, die HTML zurückgibt)

Also, alles, was Sie jetzt brauchen, ist Ihre WinFroms App bekommen, um mit dem PHP-Code, den Sie gepostet haben, zu sprechen oben, über einen Webservice. Um es anders auszudrücken, wir möchten den PHP-Code, den Sie in einem Webdienst haben, einbinden und dann Ihre WinForms-App dazu bringen, den Webdienst zu nutzen.

Denken Sie daran, dass für die Sicherheit, müssen Sie sicherstellen, dass Sie SSL und machen einen POST verwenden, nicht eine GET (dh das Passwort muss im Körper der Nachricht verschlüsselt werden, nicht auf die URL stecken!)

Hier sind einige Tutorials auf ein PHP-Webservice zu schaffen (bessere muß vorhanden sein): https://davidwalsh.name/web-service-php-mysql-xml-json https://www.codeproject.com/Tips/671437/Creating-Web-Service-Using-PHP-Within-Minutes

ist Es gibt viele Möglichkeiten, um einen Web-Service von C# zu konsumieren. RestSharp ist wahrscheinlich ideal.

Beachten Sie, dass Sie wahrscheinlich SOAP oder JSON als Format wählen werden. Suchen Sie nach einem Webservice-Tutorial und einem Consumer-Tutorial, die dasselbe Format verwenden. (Erstellen eines Webservice, der verschiedene Formate zurückgeben kann, je nachdem, was der Client anfordert, ist aber ein bisschen fortgeschrittener. Ich habe kein Tutorial dafür in PHP)

(In diesem Zusammenhang ist auch "API" mit "Web-Service", aber beachte, dass "API" auch ganz andere Bedeutungen haben kann)

Es sieht vielleicht so aus, als hättest du einen langen Weg vor dir, aber mach dir keine Sorgen, wenn du dein erstes Beispiel hast arbeiten, es wird schnell und einfach sein, die gleiche Methode zu verwenden, um alle Arten von tollen Sachen zu machen.

+0

Sie haben Recht, danke für die beste Antwort! –

1

Wenn Sie eine API verwenden, wird die Datenzugriffsschicht von der Client-Software vollständig getrennt. Der Web-Service muss die Antwort nur auf eine bestimmte Weise drucken, damit die Clients dies verstehen (XML, JSON, YAML usw.).

In Ihrer C# -Anwendung werden Sie diese API aufrufen und dann die Antworten in C# -Objekte konvertieren. In C# verwende ich normalerweise . Es ist einfach zu verwenden und konvertiert von XML oder JSON zu C# -Objekten.

Verwenden Sie in Ihrem PHP-Server ein Framework oder Mikro-Framework, das HTTP-Codes und Antworten verarbeitet. Ist die Verantwortung des Servers, die richtige Antwort an den Client zu senden (Antwort Inhaltstyp, Status, etc.). Versuchen Sie das mit der Hand kann manchmal langweilig sein. Es ist jetzt nichts falsch an deinem Code, aber bald wird es ein kleines Monster werden.

Für Ihren Fall Lumen oder Silex kann einfach und nützlich sein!

Verwandte Themen