2013-06-25 2 views
0

Я новичок в webservice и занимаюсь тем, как создавать веб-службы, на данный момент я думаю, что мне как-то удается сделать это, но он не возвращает никакого результата. Я использую nusoap, а также Codeigniter.nusoap codeigniter webservice сервер и клиент

WebService Сервер находится в приложении под названием WebServiceTester

ниже код для Bills_WS контроллера, которые служат в качестве сервера:

class Bills_WS extends CI_Controller 
{ 
    function __construct() 
    { 
     parent:: __construct();   
    } 

    public function index() 
    { 
     $this->load->library('Nusoap_lib'); 

     $namespace = "http://localhost:8080/webservicetester/bills_ws.php?wsdl"; 

     $server = new nusoap_server; 
     $server->configureWSDL('WebServiceTester'); 
     $server->wsdl->schemaTargetNamespace = $namespace; 

     $server->register('hello'); 

     $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ''; 
     $server->service($HTTP_RAW_POST_DATA); 
    } 
    function hello() 
    { 
     return "greetings from server"; 
    } 
} 

и позвонить, я звоню в другом приложении (та же машина) называется ussccsv1 под библиотекой ws_client, что используется в контроллере транзакции:

class Ws_client 
{ 
    private $CI = null; 
    function __construct() 
    { 
     $this->CI =& get_instance(); 
    } 

    public function transaction_send_ws($param) 
    { 
     $this->CI->load->library('nuSoap_lib'); 

     $url = 'http://localhost/webservicetester.php/bills_ws?wsdl'; 

     $client = new nusoap_client($url); 
     $response = $client->call('hello'); 

     if($client->fault) 
     { 
      echo "FAULT:".$client->faultcode; 
      echo "string: ".$client->faultstring; 
     } 
     else 
     { 
      $r = $response; 
      count($r); 
echo "count".count($r); 

     } 
    } 
} 

Я аль так в том числе nusoap_lib я использую:

class Nusoap_lib 
{ 
    function nusoap_lib() 
    { 
     include(APPPATH.'libraries/nusoap/nusoap'.EXT); 
    } 
} 

мои вопросы: 1. Как вызвать WebService в bills_ws? Правильно? $url? coz пока это дает мне ошибку 404 HTTP не найден. 2. Является ли ошибка в ws_client или bills_ws? 3. но он дает мне count($r) в ws_client = 1, когда я его эхо.

пытался следовать этот учебник, но я, кажется, не понимают в полной мере: - http://www.phpeveryday.com/articles/PHP-Web-Services-Fetching-Data-From-Database-P105.html - http://ellislab.com/forums/viewthread/59710/

Спасибо заранее.

+1

Решена проблема: использовал этот пример, чтобы решить: http://board.phpbuilder.com/showthread.php?10224396-php-xml-NuSoap-!working – Ponce

+0

Если вы решили эту проблему, пожалуйста, напишите ответ здесь и примите свой ответ, чтобы другие выиграли. – Sushil

ответ

2

Решение для вышеуказанного кода.

Ваш контроллер:

<?php 
class Bills_WS extends CI_controller { 
    function __construct() { 
     parent::__construct(); 

     $this->load->library("Nusoap_lib"); 
     $this->load->model("Member"); 

     $this->nusoap_server = new soap_server(); 
     $this->nusoap_server->configureWSDL("Bills_WSDL", "urn:Bills_WSDL"); 

     $this->nusoap_server->register('hello',    // method name 
      array('name' => 'xsd:string'),  // input parameters 
      array('return' => 'xsd:string'),  // output parameters 
      'urn:Bills_WSDL',      // namespace 
      'urn:Bills_WSDL#hello',    // soapaction 
      'rpc',        // style 
      'encoded',       // use 
      'Says hello to the caller'   // documentation 
     ); 
    } 

    function index(){ 

     if($this->uri->rsegment(3) == "wsdl") { 
      $_SERVER['QUERY_STRING'] = "wsdl"; 
     } else { 
      $_SERVER['QUERY_STRING'] = ""; 
     }   

     function hello($name) { 
       return 'Hello, ' . $name; 
     } 
     $this->nusoap_server->service(file_get_contents("php://input")); 
    } 

} 

сделать запись в /config/routes.php

$route['Bills_WS/wsdl'] = "Bills_WS/index/wsdl"; 

WSDL доступа К этому URL

http://localhost/ci_nusoap/index.php/Bills_WS/wsdl 

я надеюсь, что вы можете увидеть XML в браузере Теперь.

Код клиента SOAP.

<?php 
class Soap_client extends CI_controller { 

    function __construct() { 
     parent::__construct(); 

     $this->load->library("Nusoap_lib"); 
     $this->load->helper("url"); 

    } 

    function index() { 

     $this->soapclient = new soapclient(site_url('Bills_WS/index/wsdl'), true); 

     $err = $this->soapclient->getError(); 
     if ($err) { 
      echo '<h2>Constructor error</h2><pre>' . $err . '</pre>'; 

     } 

     $result = $this->soapclient->call('hello', array('name' => 'Scott')); 
     // Check for a fault 
     if ($this->soapclient->fault) { 
      echo '<h2>Fault</h2><pre>'; 
      print_r($result); 
      echo '</pre>'; 
     } else { 
      // Check for errors 
      $err = $this->soapclient->getError(); 
      if ($err) { 
       // Display the error 
       echo '<h2>Error</h2><pre>' . $err . '</pre>'; 
      } else { 
       // Display the result 
       echo '<h2>Result</h2><pre>'; 
       print_r($result); 
      echo '</pre>'; 
      } 
     } 
    } 



} 

SOAP Client Access Теперь

http://localhost/ci_nusoap/index.php/soap_client 

Done.

+0

Я создал отдельную библиотеку классов, и оттуда я вызываю метод с помощью класса, такого как Master.fruits, где Master => class и fruits is => Method, он отлично работает в php, но на C# он выдает ошибку, как это не должно быть master.fruits это должно быть как мастерфрукты, любая идея – musthafa

+0

Можете ли вы предоставить мне некоторые фрагменты кода на C#. –