C#, PHP a SOAP – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

C#, PHP a SOAP – .NET – Fórum – Programujte.comC#, PHP a SOAP – .NET – Fórum – Programujte.com

 

plasmo0
Věrný člen
29. 11. 2009   #1
-
0
-

Ahoj, tak se mi povedlo rozchodit webovou službu server-klient v PHP pomocí SOAP s využitím WSDL, ale problém mi nastává když chci webovou službu využít v C#. Ve VS2008 přídám WS pomocí Add new webservice, to proběhne vše OK, ale jakmile chci metody volat v kódu tak tam vůbec nejsou.

WSDL soubor jsem spáchal takto:



<?xml version ='1.0' encoding ='UTF-8' ?>
<definitions
xmlns:class1Ns='http://cms/soap'
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='pow2Request'>
<part name='number' type='xsd:float'/>
</message>

<message name='pow2Response'>
<part name='result' type='xsd:float'/>
</message>

<message name='pow3Request'>
<part name='number' type='xsd:float'/>
</message>

<message name='pow3Response'>
<part name='result' type='xsd:float'/>
</message>

<message name='pow4Request'>
<part name='number' type='xsd:float'/>
</message>

<message name='pow4Response'>
<part name='result' type='xsd:float'/>
</message>

<portType name='Class1PortType'>
<operation name='pow2'>
<input message='class1Ns:pow2Request'/>
<output message='class1Ns:pow2Response'/>
</operation>
<operation name='pow3'>
<input message='class1Ns:pow3Request'/>
<output message='class1Ns:pow3Response'/>
</operation>
<operation name='pow4'>
<input message='class1Ns:pow4Request'/>
<output message='class1Ns:pow4Response'/>
</operation>
</portType>

<binding name='Class1Binding' type='class1Ns:Class1PortType'>
<soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>
<operation name='pow2'>
<soap:operation soapAction='urn:pow2'/>
<input>
<soap:body use='literal'/>
</input>
<output>
<soap:body use='literal'/>
</output>
</operation>
<operation name='pow3'>
<soap:operation soapAction='urn:pow3'/>
<input>
<soap:body use='literal'/>
</input>
<output>
<soap:body use='literal'/>
</output>
</operation>
<operation name='pow4'>
<soap:operation soapAction='urn:pow4'/>
<input>
<soap:body use='literal'/>
</input>
<output>
<soap:body use='literal'/>
</output>
</operation>
</binding>

<service name='Class1'>
<port name='Class1Port' binding='class1Ns:Class1Binding'>
<soap:address location='http://cms/soap/server.php'/>
<soap:address location='http://cms/soap/server.php'/>
</port>
</service>
</definitions>


Ve VS proběhne přidání taky OK:
- [IMG]http://sdilej.net/pics/f20429dd0541ee265fc6c8fcdbb733a8.PNG[/IMG]
- [IMG]http://sdilej.net/pics/dc996fdc103ceaf482091031afb46bfb.PNG[/IMG]

Kde můžu mít chybu? Děkuji

Nahlásit jako SPAM
IP: 82.150.166.–
Jak vzniká vynález? To všichni vědí, že je něco nemožné, a pak se objeví nějaký blázen, který neví, že je to nemožné, a udělá vynález. [br] Albert Einstein [br][br] http://plasmo.cz [br] http://bleskovaregistrace.cz [br] http://livetrading.cz
Radek
~ Anonymní uživatel
133 příspěvků
29. 11. 2009   #2
-
0
-

Také by mě to zajímalo. Řeším to už týden. Google mi nenapověděl.

Službu jsem vytvořil přes Zend_Framework a WSDL generuji přes Zend_Soap_AutoDiscover().

Používám aktuální verzi ZF - 1.9.

Díky za každou radu.

Nahlásit jako SPAM
IP: 90.180.115.–
plasmo0
Věrný člen
29. 11. 2009   #3
-
0
-

To Radek : Teď to WSDL zkouším generovat jako ty, ale když je chci spustit přes SOAP server, tak mi to vyhodí error:

SOAP-ERROR: Parsing WSDL: Couldn't load from 'C:\xampp\htdocs\cms\zend\wsdl.php' : Start tag expected, '<' not found



Přitom nechápu co je to za chybu, když jeto dynamicky generovaný WSDL soubor pomocí AutoDiscover(). Jak to máš ty?

index.php


<?php
include 'Zend/Soap/Server.php';

include 'class.php';


// pointing to the current file here
$soap = new Zend_Soap_Server("wsdl.php");
$soap->setClass('Petr');
$soap->handle();
?>


wsdl.php


<?php
include_once 'Zend/Soap/AutoDiscover.php';

include 'class.php';
$autodiscover = new Zend_Soap_AutoDiscover();
$autodiscover->setClass('Petr');
$autodiscover->handle();
?>


class.php


<?php
class Petr{
public function petr(string $ahoj){
return "Pozdrav: ".$ahoj;
}
public function secti(int $a,int $b){
return $a+$b;
}
}
?>

Nahlásit jako SPAM
IP: 82.150.166.–
Jak vzniká vynález? To všichni vědí, že je něco nemožné, a pak se objeví nějaký blázen, který neví, že je to nemožné, a udělá vynález. [br] Albert Einstein [br][br] http://plasmo.cz [br] http://bleskovaregistrace.cz [br] http://livetrading.cz
Radek
~ Anonymní uživatel
133 příspěvků
30. 11. 2009   #4
-
0
-

Ahoj - no mám to podobně... WSDL mi to normálně generuje, seznam funkcí mi ještě .Net ukáže, ale nemůžu to pak použít.

Nahrál bych to, ale nemám to tady s sebou.

Nahlásit jako SPAM
IP: 213.151.83.–
Radek
~ Anonymní uživatel
133 příspěvků
30. 11. 2009   #5
-
0
-

plasmo: zkus se podivat na toto a zkus tu metodu addSchemaTypeSection()

http://n4.nabble.com/Soap-Server-incompatiiblity-with-NET-Client-td676034.html#a676034

Nejsem teď u počítače se svým projektem - ale zajímalo by mne, zdali to zabere. Zkus se na to mrknout a dej vědět.

Nahlásit jako SPAM
IP: 213.151.83.–
plasmo0
Věrný člen
30. 11. 2009   #6
-
0
-

No už se mi to povedlo eliminovat na chybu:

<SOAP-ENV:Envelope>

<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>Sender</faultcode>
<faultstring>Invalid XML</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>


Ale vůbec nechápu, přeci když to generuju knihovnou Zendu, podle manuálu tak tam chyba nemůže být :-(

Nahlásit jako SPAM
IP: 147.32.22.–
Jak vzniká vynález? To všichni vědí, že je něco nemožné, a pak se objeví nějaký blázen, který neví, že je to nemožné, a udělá vynález. [br] Albert Einstein [br][br] http://plasmo.cz [br] http://bleskovaregistrace.cz [br] http://livetrading.cz
clpx
~ Anonymní uživatel
11 příspěvků
30. 11. 2009   #7
-
0
-

Evidentne tam ale chyba je.

Nahlásit jako SPAM
IP: 80.95.113.–
Radek
~ Anonymní uživatel
133 příspěvků
30. 11. 2009   #8
-
0
-

No, buď to zend generuje blbě,
nebo to Visual Studio pobírá v trochu jiném formátu.

Je to standartní formát - ale to HTML taky a podívej se jak se k tomu IE postavil.
Mě nenapadá nic jiného. Ještě zkusit nějaký jiný generátor wsdl (ale nerad bych se Zendu vzdával).
Nevím kdy se k tomuto dostanu - v každém případě, pokud se někdo pohne, nechť podá zprávu.

Nahlásit jako SPAM
IP: 213.151.83.–
Radek
~ Anonymní uživatel
133 příspěvků
30. 11. 2009   #9
-
0
-

2 plasmo: a jak konkrétně jsi postupoval?

Nahlásit jako SPAM
IP: 213.151.83.–
plasmo0
Věrný člen
30. 11. 2009   #10
-
0
-

To clpx : Prosím, pokud nemáš řešení či nápad, tak nespamuj tohle vlákno. Že tam chyba je vím i bez tvého příspěvku...

To Radek : Upravil index.php takto:



<?php
include 'Zend/Soap/Server.php';
include 'Zend/Soap/AutoDiscover.php';

include 'class.php';

$wsdl = 'http://' . $_SERVER["SERVER_NAME"] . $_SERVER['PHP_SELF'] . '?wsdl';
if(isset($_GET['wsdl']))
{
//include 'class.php';
$autodiscover = new Zend_Soap_AutoDiscover();
$autodiscover->setClass('Petr');
$autodiscover->handle(); ;
}else{

// pointing to the current file here
$soap = new Zend_Soap_Server($wsdl,array('actor'=>'urn:BasicAPI', 'soap_version' => SOAP_1_2));
$soap->setClass('Petr');
//$soap->setObject(new Petr("čau"));
$soap->registerFaultException('Exception');
$soap->handle();
}

?>

Nahlásit jako SPAM
IP: 82.150.166.–
Jak vzniká vynález? To všichni vědí, že je něco nemožné, a pak se objeví nějaký blázen, který neví, že je to nemožné, a udělá vynález. [br] Albert Einstein [br][br] http://plasmo.cz [br] http://bleskovaregistrace.cz [br] http://livetrading.cz
Radek
~ Anonymní uživatel
133 příspěvků
30. 11. 2009   #11
-
0
-

A když se snažíš přidat tu službu v C# tak dáváš tuto adresu?

http://servername/neco?wsdl ???

To je podle mě správně - kde je tedy zakopaný pes? Google stále mlčí...

Nahlásit jako SPAM
IP: 90.180.115.–
plasmo0
Věrný člen
30. 11. 2009   #12
-
0
-

To Radek : to sice jo, ale wsdl obsahuje odakz na ws, tj: http://servername/neco a to právě vyhodí tu chybu

Nahlásit jako SPAM
IP: 82.150.166.–
Jak vzniká vynález? To všichni vědí, že je něco nemožné, a pak se objeví nějaký blázen, který neví, že je to nemožné, a udělá vynález. [br] Albert Einstein [br][br] http://plasmo.cz [br] http://bleskovaregistrace.cz [br] http://livetrading.cz
Radek
~ Anonymní uživatel
133 příspěvků
30. 11. 2009   #13
-
0
-

A na co by tam spravne mel byt odkaz??? Ja jsem mel za to, ze to ma ukazovat prave na wsdl.

Zkusil jsem udelat to, ze definice wsdl nebude generovana pokud existuje parametr get, ale dal jsem to na vlastni soubor (bez parametru) - tedy misto http://servername/neco?wsdl na http://servername/wsdl

no - ale problem vyresen nebyl - chtel jsem zkratka zkusit, jestli to nestriha GET parametry.

Mozna se na to koukame uplne spatne.

Vis tedy, co by tam melo byt???

Spravna struktura wsdl mi znama neni, proto jsem prave vyuzil trid ZF.

Nahlásit jako SPAM
IP: 90.180.115.–
plasmo0
Věrný člen
1. 12. 2009   #14
-
0
-

Odkaz má jít na to WSDL.

Problém, který jsem měl mi pomohl dnes vyřešit spolužák. Chyběli mi pouze komentáře v class.php

WSDL autodiscovery utilizes the PHP docblocks provided by the developer to determine the parameter and return types. In fact, for scalar types, this is the only way to determine the parameter types, and for return types, this is the only way to determine them.

That means, providing correct and fully detailed docblocks is not only best practice, but is required for discovered class.

Nahlásit jako SPAM
IP: 82.150.166.–
Jak vzniká vynález? To všichni vědí, že je něco nemožné, a pak se objeví nějaký blázen, který neví, že je to nemožné, a udělá vynález. [br] Albert Einstein [br][br] http://plasmo.cz [br] http://bleskovaregistrace.cz [br] http://livetrading.cz
Radek
~ Anonymní uživatel
133 příspěvků
1. 12. 2009   #15
-
0
-

Ahoj,
prosim Tě a mohl bys sem napsat příklad té třídy??? Já tam nějaké komentáře mám - ale nejsem si jist, že to mám dobře.

Předem děkuji :-)

Nahlásit jako SPAM
IP: 90.180.115.–
plasmo0
Věrný člen
1. 12. 2009   #16
-
0
-

<?php

class Petr{
/**
* @param string $ahoj
* @return string
*/
public function Petr($ahoj){
return $ahoj;
}

/**
* @param integer $a
* @param integer $b
* @return integer
*/
public function secti($a,$b){
return $a+$b;
}

}
?>

Nahlásit jako SPAM
IP: 82.150.166.–
Jak vzniká vynález? To všichni vědí, že je něco nemožné, a pak se objeví nějaký blázen, který neví, že je to nemožné, a udělá vynález. [br] Albert Einstein [br][br] http://plasmo.cz [br] http://bleskovaregistrace.cz [br] http://livetrading.cz
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý