Не получается вызвать в клиенте метод веб-сервиса

311
12 августа 2017, 04:28

Решил попробовать сделать простенький клиент-сервер с использованием SOAP и WSDL. Все делал на локальном сервере, все файлы лежат в корне сайта.

Код сервера:

Server.php

<?php 
$quotes = array( 
  "ibm" => 98.42 
);    
function getQuote($symbol) {
  global $quotes; 
  return $quotes[$symbol]; 
} 
ini_set("soap.wsdl_cache_enabled", "0");
$server = new SoapServer("http://client.dev/stockquote.wsdl");
$server->addFunction("getQuote");
$server->handle();

Код на wsdl:

stockquote.wsdl

<?xml version ='1.0' encoding ='UTF-8' ?> 
<definitions name='StockQuote' 
         targetNamespace='http://example.org/StockQuote'
         xmlns:tns=' http://example.org/StockQuote '
         xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'
         xmlns:xsd='http://www.w3.org/2001/XMLSchema'
         xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/'
         xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'
         xmlns='http://schemas.xmlsoap.org/wsdl/'>
<message name='getQuoteRequest'>
    <part name='symbol' type='xsd:string'/>
</message>
<message name='getQuoteResponse'>
    <part name='Result' type='xsd:float'/>
</message>
<portType name='StockQuotePortType'>
    <operation name='getQuote'>
        <input message='tns:getQuoteRequest'/>
        <output message='tns:getQuoteResponse'/>
    </operation>
</portType>
<binding name='StockQuoteBinding' type='tns:StockQuotePortType'>
    <soap:binding style='rpc'
    transport='http://schemas.xmlsoap.org/soap/http'/>
    <operation name='getQuote'>
    <soap:operation soapAction='urn:xmethods-delayed-quotes#getQuote'/>
    <input>
        <soap:body use='encoded' namespace='urn:xmethods-delayed-quotes'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </input>
    <output>
        <soap:body use='encoded' namespace='urn:xmethods-delayed-quotes'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </output>
    </operation>
</binding>
<service name='StockQuoteService'>
    <port name='StockQuotePort' binding='StockQuoteBinding'>
        <soap:address location='http://client.dev/stockquote.wsdl'/>
    </port>
</service>

Код клиента:

Client.php

<?php 
$client = new SoapClient("http://client.dev/stockquote.wsdl");
var_dump($client->__getFunctions());
print($client->getQuote("ibm"));

При открытии клиента, выводит ошибку Fatal error: Uncaught SoapFault exception: [Client] Function ("getQuote") is not a valid method for this service in D:\wamp\www\client.dev\client.php on line 7

P.S. Ошибку гуглил, но никаких дельных советов так и не нашел. php_soap.dll в php.ini включен, версия php - 7.0.1

READ ALSO
Как найти переменную экземпляра класса?

Как найти переменную экземпляра класса?

В классе есть нужный мне методНепонятно объект уже создан или надо его мне создать

228
Смена версии php в Ubuntu

Смена версии php в Ubuntu

Привет Нужно поменять версию php с 7 на 56 на Ubuntu

364
Система аватарок [требует правки]

Система аватарок [требует правки]

Помогите сделать систему аватарок, с помощью переменных php

243
Как удалить старую версию PHP Ubuntu

Как удалить старую версию PHP Ubuntu

Как удалить старую версию PHP (точнее полностью php) в Ubuntu?

314