Как вы поддерживаете исключения PHP в файле wsdl - PullRequest
0 голосов
/ 17 ноября 2009

Я не уверен, как правильно сделать элемент ошибки в файле wsdl, представляющем исключение PHP.

Я создал веб-сервис PHP, который выдает исключение для целей тестирования. Когда я вызываю этот веб-сервис в тестовом проекте C #, я получаю исключение отражения с сообщением «Элемент уже добавлен. Введите словарь:« System.Object »Добавляемый ключ:« System.Object »».

Таким образом, это, очевидно, означает, что я неправильно создал элемент неисправности в файле wsdl.

Ответы [ 2 ]

0 голосов
/ 26 ноября 2009

Я думаю, что лучше вернуть себе сообщение об ошибке с кодом состояния http = 200 и типом содержимого = text / xml. Таким образом, вы можете поймать сообщение об ошибке в Flash и Flex

    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;
    }
}
0 голосов
/ 17 ноября 2009

Я не знаю ни о PHP, ни о том, насколько очевидно, что вы допустили ошибку при создании элемента неисправности. Также я не знаю, как выглядит ваш wsdl или ваш php, но вот пример wsdl с сообщением об ошибке, которое работает:

<?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>

С уважением, Миэль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...