0

我是网络服务的新手,一直在研究如何创建网络服务,目前,我想我设法做了一个,但它没有返回任何结果。我正在使用 nusoap 和 Codeigniter。

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";
    }
}

为了调用它,我在事务控制器中使用的 ws_client 库下另一个名为 ussccsv1 的应用程序(同一台机器)中调用它:

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. 我如何调用 web 服务bills_ws?是$url正确的吗?因为到目前为止它给了我 404 错误 HTTP 未找到。2. 故障在ws_clientbills_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/

先感谢您。

4

1 回答 1

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";

通过此 URL 访问 WSDL

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 客户端

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

完毕。

于 2014-02-23T14:58:42.803 回答