2016-06-19 3 views
0

C# 클라이언트를 사용하여 사용자를 인증하려고하지만 아무 것도 작동하지 않습니다. 내가 모든 기능을 모르는, 그래서 나는 비주얼 스튜디오에 새로 온 사람/내 기본 버튼 이벤트 :C# 클라이언트 인증 PHP 비누 서버

 using System; 
    using System.Collections.Generic; 
    using System.ComponentModel; 
    using System.Data; 
    using System.Drawing; 
    using System.Linq; 
    using System.Net; 
    using System.Text; 
    using System.Threading.Tasks; 
    using System.Windows.Forms; 

    namespace WindowsFormsApplication1 
    { 
     public partial class Form1 : Form 
     { 
      public Form1() 
      { 
       InitializeComponent(); 
      } 

      private void button1_Click(object sender, EventArgs e) 
      { 
       localhost.Calculator client = new localhost.Calculator(); 

       string returnString = client.Average(10,8); 
       //System.Diagnostics.Debug.Write(rep); 
       label1.Text = returnString; 
      } 
     } 
    } 

내 server.php 파일 :

 <?php 
    ini_set("soap.wsdl_cache_enabled", "0"); 

    class Server{ 

     protected $class_name = ''; 

     public function __construct($class_name) 
     { 
      $this->class_name = $class_name; 
     } 

     public function authenticate ($username, $password) 
     { 
      if ($username != 'admin' && $password != 'admin') return false; 
      else return true; 
     } 

     public function log($method_name,$data) 
     { 
      $filename = 'log.txt'; 
      $handle = fopen($filename, 'a+'); 
      fwrite($handle, date("l dS of F Y h:i:s A").' - '.$_SERVER['REMOTE_ADDR']."\r\n".$method_name."\r\n".print_r($data,true)); 
      fclose($handle); 
     } 

     public function __call($method_name, $parameters) 
     { 
      $this->log($method_name,$parameters); // log 

      if(!$this->authenticate($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])) 
      { 

      } 
      else 
      { 
       if(!method_exists($this->class_name, $method_name)) 
        return 'Method '.$method_name.' not found'; // methot exist check 

       return call_user_func_array(
         array($this->class_name, $method_name), 
         $parameters 
       ); //call method  
      } 
     } 
    } 


    class Calculator { 
     public function Average ($parameters) 
     { 
      $num1 = $parameters->num1; 
      $num2 = $parameters->num2; 

      return self::AverageResponse(($num1 + $num2)/2); 
     } 

     public function AverageResponse ($message) 
     { 
      return ['Result' => $message]; 
     } 

     public function Minus ($parameters) 
     { 
      $num1 = $parameters->num1; 
      $num2 = $parameters->num2; 

      return self::MinusResponse($num1 - $num2); 
     } 

     public function MinusResponse ($message) 
     { 
      return ['Result' => $message]; 
     } 
    } 

    class in { 

    } 

    $Service = new Server('Calculator'); 
    $classmap=[ 
     'in' => 'in' 
    ]; 
    $server = new SOAPServer('http://localhost:9080/soap-websiteservice-wsdl/Calculator.wsdl', array(
     'soap_version' => SOAP_1_2, 
     'style' => SOAP_RPC, 
     'use' => SOAP_LITERAL, 
     'classmap'=>$classmap 
    )); 
    $server->setObject($Service); 
    //$server->setClass('Calculator'); 
    $server->handle(); 

PHP는 클라이언트 인증 작동합니다. 코드 :

<?php 
    // client.php 
    $options = array(
     'trace' => true, 
     'login' => 'admin', 
     'password' => 'admin' 
    ); 
    $client = new SOAPClient('http://localhost:9080/soap-websiteservice-wsdl/server.php?wsdl', $options); 

    echo "Average: \r\n"; 
    var_dump($client->Average(['num1' => 10, 'num2' => 6])->Result); 

    echo "Minus: \r\n"; 
    var_dump($client->Minus(['num1' => 10, 'num2' => 6])->Result); 

WSDL :

 <?xml version="1.0" encoding="UTF-8" standalone="no"?> 
    <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://localhost:9080/soap-websiteservice-wsdl/Calculator" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="Calculator" targetNamespace="http://localhost:9080/soap-websiteservice-wsdl/Calculator"> 
     <wsdl:types> 
     <xsd:schema targetNamespace="http://localhost:9080/soap-websiteservice-wsdl/Calculator"> 
      <xsd:element name="Average"> 
      <xsd:complexType> 
       <xsd:sequence> 
       <xsd:element name="num1" type="xsd:int" /> 
       <xsd:element name="num2" type="xsd:int"></xsd:element> 
       </xsd:sequence> 
      </xsd:complexType> 
      </xsd:element> 
      <xsd:element name="AverageResponse"> 
      <xsd:complexType> 
       <xsd:sequence> 
       <xsd:element name="Result" type="xsd:string"/> 
       </xsd:sequence> 
      </xsd:complexType> 
      </xsd:element> 

      <xsd:complexType name="AverageRequestType"> 
      <xsd:sequence> 
       <xsd:element name="num1" type="xsd:int"></xsd:element> 
       <xsd:element name="num2" type="xsd:int"></xsd:element> 
      </xsd:sequence> 
      </xsd:complexType> 
      <xsd:element name="Minus"> 
      <xsd:complexType> 
       <xsd:sequence> 

        <xsd:element name="num1" type="xsd:int"></xsd:element> 
        <xsd:element name="num2" type="xsd:int"></xsd:element> 
       </xsd:sequence> 
      </xsd:complexType> 
      </xsd:element> 
      <xsd:element name="MinusResponse"> 
      <xsd:complexType> 
       <xsd:sequence> 

        <xsd:element name="Result" type="xsd:string"></xsd:element> 
       </xsd:sequence> 
      </xsd:complexType> 
      </xsd:element> 
      <xsd:element name="AverageFault"> 
      <xsd:complexType> 
       <xsd:sequence> 

        <xsd:element name="AverageFault" type="xsd:string"></xsd:element> 
       </xsd:sequence> 
      </xsd:complexType> 
      </xsd:element> 
      <xsd:element name="AverageFault1"> 
      <xsd:complexType> 
       <xsd:sequence> 

        <xsd:element name="AverageFault" type="xsd:string"></xsd:element> 
       </xsd:sequence> 
      </xsd:complexType> 
      </xsd:element> 
     </xsd:schema> 
     </wsdl:types> 
     <wsdl:message name="AverageRequest"> 
     <wsdl:part element="tns:Average" name="parameters"/> 
     </wsdl:message> 
     <wsdl:message name="AverageResponse"> 
     <wsdl:part element="tns:AverageResponse" name="parameters"/> 
     </wsdl:message> 
     <wsdl:message name="MinusRequest"> 
     <wsdl:part name="parameters" element="tns:Minus"></wsdl:part> 
     </wsdl:message> 
     <wsdl:message name="MinusResponse"> 
     <wsdl:part name="parameters" element="tns:MinusResponse"></wsdl:part> 
     </wsdl:message> 
     <wsdl:message name="AverageFault"> 
     <wsdl:part name="parameters" element="tns:AverageFault"></wsdl:part> 
     </wsdl:message> 
     <wsdl:message name="AverageFault1"> 
     <wsdl:part name="parameters" element="tns:AverageFault1"></wsdl:part> 
     </wsdl:message> 
     <wsdl:portType name="Calculator"> 
     <wsdl:operation name="Average"> 
      <wsdl:input message="tns:AverageRequest"/> 
      <wsdl:output message="tns:AverageResponse"/> 

      </wsdl:operation> 
     <wsdl:operation name="Minus"> 
      <wsdl:input message="tns:MinusRequest"></wsdl:input> 
      <wsdl:output message="tns:MinusResponse"></wsdl:output> 
     </wsdl:operation> 
     </wsdl:portType> 
     <wsdl:binding name="CalculatorSOAP" type="tns:Calculator"> 
     <soap:binding style="document" 
      transport="http://schemas.xmlsoap.org/soap/http" /> 
     <wsdl:operation name="Average"> 
      <soap:operation 
       soapAction="http://localhost:9080/soap-websiteservice-wsdl/Calculator/NewOperation" /> 
      <wsdl:input> 
       <soap:body use="literal" /> 
      </wsdl:input> 
      <wsdl:output> 
       <soap:body use="literal" /> 
      </wsdl:output> 
     </wsdl:operation> 
     <wsdl:operation name="Minus"> 
      <soap:operation 
       soapAction="http://localhost:9080/soap-websiteservice-wsdl/Calculator/Minus" /> 
      <wsdl:input> 
       <soap:body use="literal" /> 
      </wsdl:input> 
      <wsdl:output> 
       <soap:body use="literal" /> 
      </wsdl:output> 
     </wsdl:operation> 
     </wsdl:binding> 
     <wsdl:service name="Calculator"> 
     <wsdl:port binding="tns:CalculatorSOAP" name="CalculatorSOAP"> 
      <soap:address location="http://localhost:9080/soap-websiteservice-wsdl/server.php"/> 
     </wsdl:port> 
     </wsdl:service> 
    </wsdl:definitions> 
+0

오류 메시지가 표시된다고 생각하면 포함시킬 수 있습니다. –

+0

여기에 오류가 없습니다. 난 그냥 C# 클라이언트에서 PHP 비누 서버로 로그인 및 암호를 보낼 뜨거운 모르겠다. 예를 들어 PHP 클라이언트를 볼 수 있으며 어디에서 쉽게 로그인과 비밀번호를 보낼 수 있습니까? – Ernestyno

답변

0

나는 그것을 얻을!

내 모든 SOAP 서버 및 클라이언트 파일 : 아카이브 enter link description here 파일 : WSDL, server.php, client.php, CalculatorService.php는, Calculator.php, Average.php이 결과에서

을 log.txt에 당신 볼 수 enter image description here

또한 클라이언트가 허가되었습니다!