Nasıl bir wsdl dosyası PHP istisnalarını destekleyen yok

2 Cevap php

Ben doğru bir PHP istisna repesenting bir wsdl dosyası bir arıza elemanı nasıl emin değilim.

Ben test amaçlı bir istisna atar bir PHP web hizmeti oluşturduk. Ben bir test C # projesi bu web hizmetini aradığınızda, ben mesajı ".: 'System.Object' eklenen anahtar: 'System.Object' Öğe zaten eklenmiş sözlükte Key" ile bir yansıması istisna olsun.

Yani bu tabii ki ben wsdl dosyasında doğru arıza elemanı yarattım demektir.

2 Cevap

Ben senin hatan elemanı oluşturulmasında bir hata yapmış olduğunu nasıl bariz PHP hakkında bilmek, ya da bilmiyorum. Ne de ben senin Wsdl veya php neye benzediğini biliyorum, ama burada çalışan bir arıza mesajı ile bir wsdl bir örnek yok:

<?xml version="1.0"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
                  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
                  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                  xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
                  xmlns:tns="http://www.your.site/YourService"
                  targetNamespace="http://www.your.site/YourService"
                  name="ays">
    <xsd:import schemaLocation="http://www.your.site/YourService/AtYourService.xsd"
                namespace="http://www.your.site/YourService"/>
    <wsdl:message name="Input">
        <wsdl:part name="parameters"
                   element="tns:Question"/>
    </wsdl:message>

    <wsdl:message name="Output">
        <wsdl:part name="info"
                   element="tns:Answer"/>
    </wsdl:message>

    <wsdl:message name="Fault">
        <wsdl:part name="detail"
                   element="tns:FaultMessage"/>
    </wsdl:message>

    <wsdl:portType name="YourPortType">
        <wsdl:operation name="Question">
            <wsdl:input wsaw:Action="http://www.your.site/YourService/Question"
                        message="tns:Input"/>
            <wsdl:output wsaw:Action="http://www.your.site/YourService/Answer"
                         message="tns:Output"/>
            <wsdl:fault wsaw:Action="http://www.your.site/YourService/Fault"
                        name="QuestionFault"
                        message="tns:Fault"/>
        </wsdl:operation>
    </wsdl:portType>

    <wsdl:binding name="YourBinding"
                  type="tns:YourPortType">
        <wsdl:operation name="Question">
            <soap:operation soapAction="http://www.your.site/YourService/Question" style="document"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
            </wsdl:output>
            <wsdl:fault name="QuestionFault">
                <soap:fault name="QuestionFault" use="literal"/>
            </wsdl:fault>
        </wsdl:operation>
    </wsdl:binding>

    <wsdl:service name="YourService">
        <wsdl:port name="YourBinding" binding="tns:YourBinding">
            <soap:address location="http://www.your.site/YourService"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

Saygılar, Miel.

Ben kendi kendini = 200 http durum kodu ve içerik-type = text / xml ile arıza mesajını dönmek için daha iyi olduğunu düşünüyorum. Böylece, Flash ve Flex içinde hata mesajı yakalamak

    header("status: 200");
    header("Content-Type: text/xml; charset=utf-8");
    try {
         $wsdl = "http://wsdluri";
         $serverConfig = array("soap_version"=> SOAP_1_2, "encoding" => "UTF-8");
         $server = new SoapServer($wsdl, $serverConfig);
         $server->setObject($myService);
         $server->handle($HTTP_RAW_POST_DATA);
    } catch (Exception $exception) {
    $xmlstr =
    <<<XML
    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
    <SOAP-ENV:Fault>
    <faultcode>{$exception->getCode()}</faultcode>
    <faultstring>{$exception->getMessage()}</faultstring>
    <detail><![CDATA[{$exception->getTraceAsString()}]]></detail>
    </SOAP-ENV:Fault>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    XML;
    echo $xmlstr;
    }
}