M
						
					
					
						
					
				
				
					Hallo,
ich hoffe ihr könnt mir helfen!
Ich habe einen simplen Webservice erstellt der 2 Zahlen annimmt und damit rechnet, das ganze in php wie folgt aus:
<?php 
function add($a, $b, $c) 
{ 
	$c=2;
	$d=($a+$b)*$c;
	return $d;
} 
$server = new SoapServer("licence.wsdl"); 
$server->addFunction("add");
$server->handle(); 
?>
Dateiname: server.php
Dazu habe ich eine wsdl-Datei erstellt:
<?xml version="1.0" encoding="UTF-8"?>
 	<wsdl:definitions 
		targetNamespace="http://www.intercms.net/licence" 
		xmlns:apachesoap="http://xml.apache.org/xml-soap" 
		xmlns:impl="http://www.intercms.net/licence"
		xmlns:intf="http://www.intercms.net/licence"
		xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
		xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
		xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
		xmlns:xsd="http://www.w3.org/2001/XMLSchema">
		<wsdl:message name="addRequest">
			<part name="a" type="xsd:int"/>
			<part name="b" type="xsd:int"/>
		</wsdl:message>
		<wsdl:message name="addResponse">
			<wsdl:part name="addReturn" type="xsd:int" />
		</wsdl:message>
		<wsdl:portType name="Server1">
			<wsdl:operation name="add">
				<wsdl:input message="impl:addRequest" 
					name="addRequest"  />
				<wsdl:output message="impl:addResponse" 
					name="addResponse" />
			</wsdl:operation>
		</wsdl:portType>
		<wsdl:binding name="server1SoapBinding" type="impl:server1">
			<wsdlsoap:binding style="rpc" 
				transport="http://schemas.xmlsoap.org/soap/http" />
			<wsdl:operation name="add">
				<wsdlsoap:operation soapAction="" />
			<wsdl:input name="addRequest">
				<wsdlsoap:body 
					encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
					namespace="http://DefaultNamespace" use="encoded" />
				</wsdl:input>
			<wsdl:output name="addResponse">
				<wsdlsoap:body 
					encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
					namespace="http://www.intercms.net/licence" use="encoded" />
			</wsdl:output>
			</wsdl:operation>
		</wsdl:binding>
		<wsdl:service name="server1Service">
		<wsdl:port binding="impl:server1SoapBinding" name="server1">
			<wsdlsoap:address location="http://www.intercms.net/licence" />
		</wsdl:port>
		</wsdl:service>
	</wsdl:definitions>
Dateiname: licence.wsdl
Um das Ergebnis der Rechnung mit c++ abzufragen habe ich folgenden Code abgetippt:
// server_abfrage.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//
#include "stdafx.h"
#include "stdio.h"
#import "msxml4.dll" 
//using namespace MSXML2;
#import "C:\Program Files\Common Files\MSSoap\Binaries\mssoap30.dll" \
            exclude("IStream", "IErrorInfo", "ISequentialStream", "_LARGE_INTEGER", \
                    "_ULARGE_INTEGER", "tagSTATSTG", "_FILETIME")
using namespace MSSOAPLib30;
void Add()
{
   ISoapSerializerPtr Serializer;
   ISoapReaderPtr Reader;
   ISoapConnectorPtr Connector;
   // Connect to the service.
   Connector.CreateInstance(__uuidof(HttpConnector30));
   Connector->Property["EndPointURL"] = "http://www.intercms.net/server.php";
   Connector->Connect();
   // Begin the message.
   //Connector->Property["SoapAction"] = "uri:AddNumbers";
   Connector->Property["SoapAction"] = "http://www.intercms.net/server:add";
   Connector->BeginMessage();
   // Create the SoapSerializer object.
   Serializer.CreateInstance(__uuidof(SoapSerializer30));
   // Connect the serializer object to the input stream of the connector object.
   Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));
   // Build the SOAP Message.
   Serializer->StartEnvelope("http://www.intercms.net/licence","","");
   Serializer->StartBody("");
   //Serializer->StartElement("addRequest","http://www.intercms.net/licence","","");
   Serializer->StartElement("a","","","");
   Serializer->WriteString("5");
   Serializer->EndElement();
   Serializer->StartElement("b","","","");
   Serializer->WriteString("10");
   Serializer->EndElement();
   //Serializer->EndElement();
   Serializer->EndBody();
   Serializer->EndEnvelope();
   // Send the message to the XML Web service.
   Connector->EndMessage();      
   // Read the response.
   Reader.CreateInstance(__uuidof(SoapReader30));
   // Connect the reader to the output stream of the connector object.
   Reader->Load(_variant_t((IUnknown*)Connector->OutputStream), "");
   // Display the result.
   printf("Answer: %s\n", (const char*)Reader->RpcResult->text);
}
int _tmain(int argc, _TCHAR* argv[])
{   CoInitialize(NULL);
   Add();
   CoUninitialize();
   return 0;
}
Ergebnis, wenn ich das in cmd ausgebe lautet:
"SOAP-ENV:Client"
Ich muss zugeben, dass ich nach dem c++-Code im Internet gegoogelt habe und mich null auskenne! Da bin ich auf euer Forum gelandet und hoffe nun, dass mir jemand helfen kann! 
Vielen Dank schonmal
milojohzak