| 

.NET C# Java Javascript Exception

1
Ich muss ein WebService mit PHP5 und eine dazu passende Anwendung mit VB.NET schreiben. Da ich mit PHP nicht sehr erfahren bin, wollte ich mit einem einfachen Beispiel anfangen. Einfach ein "add"-Funktion.
<?php
class TestClass
{
public function addFunc($a, $b)
{
$res = $a + $b;
return $res;
}
}
$soap = new SoapServer("TestService.wsdl");
$soap->setClass('TestClass');
$soap->handle();
?>

Im VB.NET habe ich dann ein Web-Verweis eingefügt und mache folgendes:
Try
Dim serv As TestService = New TestService()
Dim res As Integer = serv.addFunc(3, 8)
Debug.Print(res.ToString)
Catch ex As Exception
Debug.WriteLine(ex.Message)
End Try

Die WSDL-Datei. Ich gebe zu, da bin ich auch nicht erfahren und gar nicht sicher. Bisher hat ja .net die Arbeit übernommen.
<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:s0="http://www.fredoware.ch/TestService"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
targetNamespace="http://www.fredoware.ch/TestService"
xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>
<s:schema elementFormDefault="qualified"
targetNamespace="http://www.fredoware.ch/TestService">
<s:element name="addFunc">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="a" type="s:int" />
<s:element minOccurs="1" maxOccurs="1" name="b" type="s:int" />
</s:sequence>
</s:complexType>
</s:element>

<s:element name="addFuncResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="addFuncResult" type="s:int" />
</s:sequence>
</s:complexType>
</s:element>

</s:schema>
</types>

<message name="addFuncSoapIn">
<part name="parameters" element="s0:addFunc" />
</message>

<message name="addFuncSoapOut">
<part name="parameters" element="s0:addFuncResponse" />
</message>

<portType name="TestServicePortType">
<operation name="addFunc">
<input message="s0:addFuncSoapIn" />
<output message="s0:addFuncSoapOut" />
</operation>
</portType>

<binding name="TestServiceBinding" type="s0:TestServicePortType">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />

<operation name="addFunc">
<soap:operation soapAction="http://www.fredoware.ch/TestService/addFunc" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
</operation>

</binding>

<service name="TestService">
<port name="TestServicePort" binding="s0:TestServiceBinding">
<soap:address location="http://www.fredoware.ch/TestService/soapTest.php" />
</port>
</service>
</definitions>

Die Parameter werden nicht richtig übergeben. Alles ist 0. Der Rückgabewert auch.
Auch wenn ich zum Beispiel
return 11
in der Funktion zurückgebe.
Was mache ich falsch?
Besten Dank
29.03.2011
Fredo 575 1 9
3 Antworten
1
Bei
<message name="addFuncSoapIn">
<part name="a" type="xsd:int" />
<part name="b" type="xsd:int" />
</message>

<message name="addFuncSoapOut">
<part name="parameters" element="s0:addFuncResponse" />
</message>

<portType name="TestServicePortType">
<operation name="addFunc">
<input message="s0:addFuncSoapIn" />
<output message="s0:addFuncSoapOut" />
</operation>
</portType>


Funktioniert die Anfrage und er übergbibt alle 2 Parameter. Kenne mich nich so gut in SOAP aus, aber hoffe es hilft.

So ab ins Bett ;)
29.03.2011
Marco Rieger 820 8
Danke für deine Antwort. Es funktioniert aber nicht.
Fredo 02.04.2011
0
Ok. Jetzt geht's. Ich hatte die WSDL im Style "Document/literal wrapped" erstellt. Wahrscheinlich würde es gehen, wenn ich wüsste, wie man die Parameter in PHP richtig angeben muss.
Ich habe jetzt die WSDL im Style "Document/literal" geschrieben, und es funktioniert.
<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:s0="http://www.fredoware.ch/TestService"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
targetNamespace="http://www.fredoware.ch/TestService"
xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>
<s:schema elementFormDefault="qualified" targetNamespace="http://www.fredoware.ch/TestService">
<s:element name="a" type="s:int" />
<s:element name="b" type="s:int" />
<s:element name="res" type="s:int" />
</s:schema>
</types>

<message name="addFuncSoapIn">
<part name="param1" element="s0:a" />
<part name="param2" element="s0:b" />
</message>

<message name="addFuncSoapOut">
<part name="result" element="s0:res" />
</message>

<portType name="TestServicePortType">
<operation name="addFunc">
<input message="s0:addFuncSoapIn" />
<output message="s0:addFuncSoapOut" />
</operation>
</portType>

<binding name="TestServiceBinding" type="s0:TestServicePortType">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />

<operation name="addFunc">
<soap:operation soapAction="http://www.fredoware.ch/TestService/addFunc" />
<input><soap:body use="literal" /></input>
<output><soap:body use="literal" /></output>
</operation>

</binding>

<service name="TestService">
<port name="TestServicePort" binding="s0:TestServiceBinding">
<soap:address location="http://www.fredoware.ch/TestService/soapTest.php" />
</port>
</service>
</definitions>
02.04.2011
Fredo 575 1 9
0
Und wenn ich schon dabei bin... ich habe die PHP-Variante herausgefunden, die mit meinem ersten WSDL-Datei funktioniert:
<?php 
class TestClass
{
public function addFunc($addFunc)
{
error_log($addFunc->a);
$res->addFuncResult = $addFunc->a + $addFunc->b;
return $res;
}
}

$soap = new SoapServer("TestService.wsdl");
$soap->setClass("TestClass");

$soap->handle();
?>
02.04.2011
Fredo 575 1 9

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH