SoapHeaderException: Procedure 'SetConfig' not present

Mircot

Mitglied
Hallo,

ich versuche mich seit Tagen in SOAP Webservices mit PHP einzuarbeiten. Die allgemeinen Hürden habe ich überwunden und einen einfachen Webservice erstellt.

Nun habe ich zu der einen Methode noch eine weitere hinzugefügt. Da bekomm ich immer beim aufruf mit C# folgende Fehlermeldung:

System.Web.Services.Protocols.SoapHeaderException: Procedure 'SetConfig' not present

Durch das WSDL wird der Webservice einwandfrei ins VisualStudio Projek integriert und die erste ethode funktioniert auch, nur die zweite nicht.

PHP:
<?php
include("connect.php");
include("wsfunction.php");

$SOAPServer = new SoapServer("WebService.wsdl");
$SOAPServer->addFunction(array("GetConfigValue", "SetConfig"));
$SOAPServer->handle();

function GetConfigValue($Logincode, $ValueName)
{ 
try
{
    global $conn;

    $Abfrage = mysql_query("select Value from sys_properties where Name = '$ValueName'");
    LogMessage(mysql_error());
    while($Daten = mysql_fetch_array($Abfrage))
    {
        return $Daten[Value];
    }
    return null;
    }
    catch (Exception $e)
    {
        LogMessage($e);
    }
}
function SetConfig($Logincode, $ValueName, $Value)
{ 
    try
    {
        global $conn;

        $Abfrage = mysql_query("update sys_properties set Value = '$Value' where Name = '$ValueName'");
        LogMessage(mysql_error());

    }
    catch (Exception $e)
    {
        LogMessage($e);
    }
}
?>
Das WSDL sieht folgendermaßen aus:
Code:
<?xml version="1.0" encoding="utf-8"?>

<wsdl:definitions name="MyWebService" targetNamespace="http://localhost/ws/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://localhost/ws/"     xmlns:xsd="http://www.w3.org/2001/XMLSchema"     xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">



    <wsdl:message name="GetSysConfigRequest">
        <wsdl:part name="LoginCode" type="xsd:String"></wsdl:part>
        <wsdl:part name="ConfigName" type="xsd:String"></wsdl:part>
    </wsdl:message>

    <wsdl:message name="GetSysConfigResponse">
        <wsdl:part name="Value" type="xsd:String"></wsdl:part>
    </wsdl:message>

    <wsdl:message name="SetConfigRequest">
        <wsdl:part name="LoginCode" type="xsd:String"></wsdl:part>
        <wsdl:part name="ConfigName" type="xsd:String"></wsdl:part>    
        <wsdl:part name="ConfigValue" type="xsd:String"></wsdl:part>
    </wsdl:message>

    <wsdl:portType name="ConfigPortType">
        <wsdl:operation name="GetConfigValue">
            <wsdl:input message="tns:GetSysConfigRequest"></wsdl:input>
            <wsdl:output message="tns:GetSysConfigResponse"></wsdl:output>        
        </wsdl:operation>
        <wsdl:operation name="SetConfig">
            <wsdl:input message="tns:SetConfigRequest"></wsdl:input>
        </wsdl:operation>
    </wsdl:portType>

    <wsdl:binding name="ConfigBinding" type="tns:ConfigPortType">
        <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
        <wsdl:operation name="GetConfigValue">
            <soap:operation    soapAction="http://localhost/ws/GetConfigValue" />
            <wsdl:input> 
                <soap:body use="literal" namespace="http://localhost/ws/" />
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal" namespace="http://localhost/ws/" />
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="SetConfig">
            <soap:operation soapAction="http://localhost/ws/SetConfig" />
            <wsdl:input>
                <soap:body use="literal" namespace="http://localhost/ws/" />
            </wsdl:input>
        </wsdl:operation>
    </wsdl:binding>  
  

    <wsdl:service name="ConfigValuesWebservice">
        <wsdl:port name="ConfigWebservicePort" binding="tns:ConfigBinding">
            <soap:address location="http://localhost/OnlineShop/enwicklung/services/webservice.php"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>
Ich kann mir nicht erklären, warum ich beim Aufrufen der Zweiten Methode, diese nicht finde.

Internetsuche hat ergeben, dass ich soap.wsdl_cache_enabled=0 setzen soll. Das habe ich getan aber es hat sich nichts geändert.

Kann jemand helfen?
 
Hey,

ich bin mir nicht ganz sicher, aber ich könnte mir vorstellen das du auch das Tag <wsdl:output> für die Methode SetConfig setzen musst, auch wenn du nichts zurück geben möchtest. Ich würde es einfach mal versuchen. Wenn das nicht funktioniert, dann einfach mal einen Rückgabewert definieren und nochmal versuchen! Wenn das klappen sollte, weißt du auf jedenfall, das es am Rückgabewert liegt!

Viel Erfolg!
 
Ich gehe kaputt, es ist wirklich so. Ich habe der Methode, die eigentlich void ist, einen Rückgabewert String gegeben, und seit dem gehts.

Aber wie definier ich eine Methode, die nichts zurück geben soll?

Danke erstmal für den Tipp!
 
Zurück