Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SOAP сервер, создание сервера soap 
:(
    Опции темы
Kostuch
Дата 10.9.2007, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.9.2007
Где: Ukraine, Kiev

Репутация: нет
Всего: нет



Здравствуйте!
У меня стоит такая задача. Сделать SOAP сервер при помощи PHP что бы в дальнейшем посредствам этого сервера с моими веб сервисами могли общаться др. языки программирования (Перл, C#, Java ну и др…) Вот из всего что я пока что нарыл у меня имеется такой вот примерчик (http://www.inode.ru/articles/xml/2005-08-11/35#part_3_3) Делая все по инструкциям и доходя до следующего кода в страницах:

SERVER1.PHP
Код

<?php
class QuoteService {
  private $quotes = array("ibm" => 98.42);

  function getQuote($symbol) {
    if (isset($this->quotes[$symbol])) {
      return $this->quotes[$symbol];
    } else {
      throw new SoapFault("Server","Unknown Symbol '$symbol'.");
    }
  }
}

$server = new SoapServer("stockquote.wsdl");
$server->setClass("QuoteService");
$server->handle();
?>


CLIENT3.PHP
Код

<?php
  $client = new SoapClient("stockquote.wsdl",array('proxy_host'=>"proxy.central.office", 'proxy_port'=>3128));
  try {
    echo "<pre>\n";
    print($client->getQuote("ibm"));
    echo "\n";
    print($client->getQuote("microsoft"));
    echo "\n</pre>\n";
  } catch (SoapFault $exception) {
    echo $exception;
  }
?>


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://[insert real path here]/stockquote1.php'/>
 </port>
</service>
</definitions>

У меня получается при обращении из самого же php 5.2.3 (с подключенными всеми модулями и проинсталеным pear) вот такой вот ответ :(
Что ж я делаю не так подскажите плз?

Ошибка:
Код

SoapFault exception: [HTTP] Bad Request in F:\Apache2\htdocs\client3.php:5
Stack trace:
#0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'http://[insert ...', 'urn:xmethods-de...', 1, 0)
#1 [internal function]: SoapClient->__call('getQuote', Array)
#2 F:\Apache2\htdocs\client3.php(5): SoapClient->getQuote('ibm')
#3 {main}

PM MAIL WWW ICQ YIM   Вверх
Kostuch
Дата 10.9.2007, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.9.2007
Где: Ukraine, Kiev

Репутация: нет
Всего: нет



Используя этот пример : пример SOAP+PEAR+PHP получаю 

Catchable fatal error: Object of class SOAP_Fault could not be converted to string in F:\Apache2\htdocs\index.php on line 7и что это за HTTP

В чем может быть проблемма?
код index.php ниже
Код

require_once('SOAP/Client.php');
$wsdl=new SOAP_WSDL(
    'http://wavendon.dsdata.co.uk/axis/services/CarRentalQuotes?wsdl');

// Look at the generated code...
echo ( $wsdl->generateProxyCode() );


Это сообщение отредактировал(а) Kostuch - 12.9.2007, 19:40
PM MAIL WWW ICQ YIM   Вверх
Kostuch
Дата 10.9.2007, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.9.2007
Где: Ukraine, Kiev

Репутация: нет
Всего: нет



В общем примерчик этот заработал но вот второй и самый главный для меня не работает :( сервер SOAP Просто кудато перекидывает по рефереру и говорит "Сервер не найден - невозможно отобразить стр...".

Вот код:
[Test1.php]
Код

<?php
class Test1 {
    // Stores instance of PEAR::SOAP Server
    var $soapServer;

    // Constructor builds PEAR::SOAP Server
    function Test1 () {
        // Switch off notices to all GET
        error_reporting(E_ALL ^ E_NOTICE);

        // Instantiate PEAR::SOAP SOAP_Server
        $this->soapServer=new SOAP_Server;

        // Build the object map (using this instance) + add a namespace
        $this->soapServer->addObjectMap($this,'http://www.phppatterns.com#Test1');

        // Turn on the server
        $this->soapServer->service($GLOBALS['HTTP_RAW_POST_DATA']);
    }

    function serverTimestamp() {
        return time();
    }

    function hello($name) {
        return 'Hello '.$name;
    }
}
?>

[testserver1.php]
Код

<?php
// testserver1.php

// Include the SOAP Server
require_once('SOAP/Server.php');

// Include the test class
require_once('Test1.php');

// Start the SOAP server
$test = new Test1;
?>


В этом примере все вроде бы ничего да вот только :
Cannot pass parameter 2 by reference in Z:\home\soap.me\www\test1\client.php on line 8

(SERVER.PHP)
Код

<?php
require_once 'SOAP/Server.php';

$server = new SOAP_Server;

class SOAP_Example_Server {
    function echoString($inputString)
    {
        return $inputString;
    }
}

$soapclass = new SOAP_Example_Server();
$server->addObjectMap($soapclass,'urn:SOAP_Example_Server');
$server->service($HTTP_RAW_POST_DATA);
?>

(SERVER.PHP)
Код

<?php
require_once 'SOAP/Client.php';

$soapclient = new SOAP_Client(
    'http://www.soap.me/test1/server.php');

$result = $soapclient->call('echoStringSimple',
                 array('inputString' => 'this is a test string'),
                 array('namespace' => 'urn:SOAP_Example_Server'));
?>


Это сообщение отредактировал(а) Kostuch - 10.9.2007, 15:55
PM MAIL WWW ICQ YIM   Вверх
IZ@TOP
Дата 10.9.2007, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: нет
Всего: 73



Kostuch, а можно поинтересоваться, у вас не валидный WSDL только здесь - в примере - приведен, или вы именно его и используете?


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
sTa1kEr
Дата 10.9.2007, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: нет
Всего: 146



Цитата(Kostuch @  10.9.2007,  11:46 Найти цитируемый пост)
  <soap:address location='http://[insert real path here]/stockquote1.php'/>

Почему не прописан URL? Куда он коннектится будет?
PM MAIL   Вверх
Kostuch
Дата 10.9.2007, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.9.2007
Где: Ukraine, Kiev

Репутация: нет
Всего: нет



IZ@TOP
Все что я использую я исп. в примере больше неего :(
Но вообще разве PHP5 не может генерить сам WSDL на основании какого либо класса ? Я уже столько способов перепробовал и NuSOAP и PEAR:SOAP и обычный PHP5 SOAP extention ничего не получается. Все примеры что я привел как то не очень рабочие но др я не нашел :(
У меня стоит задача сделать SOAP сервер под PHP5.. ну PEAR я установил и все дополнения что вклю работу SOAP под ним тоже поставил но вот как все это сделать не пойму.
Самый первый пример - самый полный но и самый неудачный потому что старый и ссылки там умерли некоторые. Хотя не мне судить, но факт тот что не работает. Вот последнее 2 что я привел как то более живее но опять же не работают :(
Может кто то знает как по самому простому сделать SOAP сервен на PHP5 под Windows (сейчас именно так стоит PHP + Apache).
sTa1kEr
вы имеете ввиду эту строчку ? $client = new SoapClient("stockquote.wsdl",array('proxy_host'=>"proxy.central.office", 'proxy_port'=>3128)); ? или что я не совсем понял ?
PM MAIL WWW ICQ YIM   Вверх
sTa1kEr
Дата 10.9.2007, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: нет
Всего: 146



Цитата(Kostuch @  10.9.2007,  16:30 Найти цитируемый пост)
sTa1kEr, 
вы имеете ввиду эту строчку ? $client = new SoapClient("stockquote.wsdl",array('proxy_host'=>"proxy.central.office", 'proxy_port'=>3128)); ? или что я не совсем понял ?

Нет. Я имею ввиду 43-ию строчку WSDL. Там надо прописать URL к вашему SERVER1.PHP, иначе как по вашему клиент вообще узнает куда ему обращаться?

Добавлено через 2 минуты и 42 секунды
Да и в самом конструкторе SoapClient лучше указать URL к stockquote.wsdl. Вы же не будете таскать вместе с клиентом сам WSDL файл?
PM MAIL   Вверх
Kostuch
Дата 10.9.2007, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.9.2007
Где: Ukraine, Kiev

Репутация: нет
Всего: нет



sTa1kEr
Мдя, "факир был пян.." спасибо за то что показали что именно не так было smile а то уже все перепробовал. Но раз уж можно еще кое что спросить будет то ... а можно ли как то генерить посредствам PHP этот самый WSDL документ на основании какого либо класса допустим ?

Это сообщение отредактировал(а) Kostuch - 10.9.2007, 17:21
PM MAIL WWW ICQ YIM   Вверх
sTa1kEr
Дата 10.9.2007, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: нет
Всего: 146



Цитата(Kostuch @  10.9.2007,  17:05 Найти цитируемый пост)
а можно ли как то генерить посредствам PHP этот самый WSDL документ ? 

Имено средствами PHP - не знаю, не встречал. Да и зачем это надо? WSDL описывает работу вашего сервиса и создается один раз, после чего все клиенты работают именно по этому WSDL. А при добавлении/изменении функциональности веб сервиса обычно создается новый WSDL с постфиксом версии в имени файла (иначе может получится очень не приятная ситуация, когда у клиента в кэше старый WSDL, а сервер уже работает по новому). 
А вот IDE многие позволяют генерировать WSDL. К примеру, Zend Studio умеет очень грамотно и удобно генерировать его на основании PHP классов. Через Altova Spy XML можно просто удобно редактировать его с валидацией синтаксиса. Через Sybase Power Designer, имхо, очень удобно проектировать WSDL с нуля при помощи блок схем, а после сгенерировать PHP (да и на многих других языках) классы.
PM MAIL   Вверх
IZ@TOP
Дата 10.9.2007, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: нет
Всего: 73



По поводу автоматической генерации WSDL'я:
http://www.google.ru/search?hl=ru&q=ws...1%D0%BA&lr=
Используйте Google. Очень советую.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Kostuch
Дата 11.9.2007, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.9.2007
Где: Ukraine, Kiev

Репутация: нет
Всего: нет



sTa1kEr
Спасибо уже рассмотрел эти варианты просто прогу не хотелось ставить отдельно.
IZ@TOP
Только так и не иначе никак я все и понаходил smile Просто на первом примере лопухнулся. Но вот почему остальные не заработали не знаю. Ну в принципе это не важно так как 1 работает.

PM MAIL WWW ICQ YIM   Вверх
Kostuch
Дата 11.9.2007, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.9.2007
Где: Ukraine, Kiev

Репутация: нет
Всего: нет



Вопросик, вот эта вещица вроде может генерить WSDL! Но вот как я не пойму :( можете подсказать ? 

В общем так я и не нашел рабочей версии программы для генерения WSDL из PHP :( Только Зен студио разве что но че то он у меня перестал работать :( Да и огромная софтина как для такой простой функции


Это сообщение отредактировал(а) Kostuch - 11.9.2007, 16:35
PM MAIL WWW ICQ YIM   Вверх
IZ@TOP
Дата 11.9.2007, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: нет
Всего: 73



Kostuch, есть вариант самому генерабор WSDL'я написать) Но за это не всяк возьмется.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Kostuch
  Дата 12.9.2007, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.9.2007
Где: Ukraine, Kiev

Репутация: нет
Всего: нет



Значит текс. Создать сообщение в теме про БД я почему т оне могу... потому тут пишу...

Есть следующая проблема. Написан веб сервис на SOAP сервер посредствам PHP5 который конектится к базе и получает информацию из нее. если все делать на английском то все оки. Как только переходим на русском не передается ответ, точнее передается не в той кодировке. В общем даже из самого же ПХП если юзать сервис написанный мною то ничего не получается получить :( smile smile

Вот мой пример:
news.php
Код

require_once("DB_Connect.php");
class news {
    function getByID ($id) {
        $ret=mysql_query("select * from srv_articles where id=$id");
        $ret=mysql_fetch_row($ret);
        return $ret;
   }
}
#$rt=new news();
#echo "<pre>";
#print_r($rt->getByID(1));
#    echo "</pre>";
$server = new SoapServer("news.wsdl");
$server->setClass("news");
$server->handle();


cleint.php
Код

$client = new SoapClient("../services/news.wsdl",array('proxy_host'=>"proxy.central.office", 'proxy_port'=>3128));
  try {
    $req="ibm";
    echo "<pre>[Request] =></b>\n[Answer] => <b>";
    print_r($client->getByID(1));
    echo "</b>\n</pre>\n";
  } catch (SoapFault $exception) {
    echo $exception;
  }

DB_Connect.php
Код

$db=mysql_connect($dbhost,$dblogin,$dbpass);
if (!$db)
    {
        echo "Unable to connect to DB: " . mysql_error();
        exit;
    }
if (!mysql_select_db($dbname))
    {
        echo "Unable to select mydbname: " . mysql_error();
        exit;
    }
mysql_query("set character set utf8");
#что писать предыдущюю строчку что не писать что писать 1251 все фиолетово выдает крякобязины.. но если ее не писат вообще не работает...

news.wsdl
Код

<?xml version='1.0' encoding='UTF-8'?>

<!-- WSDL file generated by Zend Studio. -->

<definitions name="news" targetNamespace="urn:news" xmlns:typens="urn:news" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:typens0="http://webpro2/bizrealty/service/news.php">
    <message name="getByID">
        <part name="id"/>
    </message>
    <message name="getByIDResponse">
        <part name="getByIDReturn"/>
    </message>
    <portType name="newsPortType">
        <operation name="getByID">
            <input message="typens:getByID"/>
            <output message="typens:getByIDResponse"/>
        </operation>
    </portType>
    <binding name="newsBinding" type="typens:newsPortType">
        <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
        <operation name="getByID">
            <soap:operation soapAction="urn:newsAction"/>
            <input>
                <soap:body namespace="urn:news" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
            </input>
            <output>
                <soap:body namespace="urn:news" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
            </output>
        </operation>
    </binding>
    <service name="newsService">
        <port name="newsPort" binding="typens:newsBinding">
            <soap:address location="http://webpro2/bizrealty/services/news.php"/>
        </port>
    </service>
</definitions>

SQL
Код

CREATE TABLE `srv_news` (
  `id` int(5) NOT NULL auto_increment,
  `id_number` int(5) NOT NULL default '0',
  `order` int(5) NOT NULL default '0',
  `lang` varchar(3) collate utf8_unicode_ci NOT NULL default '',
  `headline` int(1) NOT NULL default '0',
  `title` varchar(255) collate utf8_unicode_ci NOT NULL default '',
  `preface` text collate utf8_unicode_ci NOT NULL,
  `content` text collate utf8_unicode_ci NOT NULL,
  `time` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `time_s` date NOT NULL default '0000-00-00',
  `time_e` date NOT NULL default '0000-00-00',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `srv_news` (`id`, `id_number`, `order`, `lang`, `headline`, `title`, `preface`, `content`, `time`, `time_s`, `time_e`) VALUES 
  (1, 1, 1, 'rus', 1, 'Привет', NULL, NULL, '2007-09-12 16:02:50', '0000-00-00', '0000-00-00'),
  (2, 1, 2, 'rus', 1, 'Здрасте', NULL, NULL, '2007-09-12 16:06:45', '0000-00-00', '0000-00-00');

Вот что выдает
Цитата

[Request] =>
[Answer] => Array
(
    [0] => 1
    [1] => 1
    [2] => 1
    [3] => ðóñ
    [4] => 0
    [5] => ðóñ
    [6] => ðóñ
    [7] => ðóñ
    [8] => 2007-09-12 16:25:24
    [9] => 1899-12-29
    [10] => 1899-12-29
)


Это сообщение отредактировал(а) Kostuch - 12.9.2007, 17:18
PM MAIL WWW ICQ YIM   Вверх
Kostuch
Дата 13.9.2007, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.9.2007
Где: Ukraine, Kiev

Репутация: нет
Всего: нет



Ну плизз.. неужели никто не знает как решить проблемму ?
PM MAIL WWW ICQ YIM   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Libraries | Следующая тема »


 




[ Время генерации скрипта: 0.1486 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.