0

我想从 c# 桌面应用程序使用 php 服务。我通过“添加服务引用”将 php 服务添加到我的项目中,但我看不到来自方法的正确响应。那就是 php 服务 wsdl;

    <?xml version="1.0" encoding="UTF-8"?>
<definitions
    xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsd = "http://www.w3.org/2001/XMLSchema"
    xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
    xmlns:SOAP-ENC = "http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:tns = "urn:Invest"
    xmlns:soap = "http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:wsdl = "http://schemas.xmlsoap.org/wsdl/"
    xmlns = "http://schemas.xmlsoap.org/wsdl/"
    targetNamespace = "urn:Invest">
    <types>
        <xsd:schema elementFormDefault = "qualified" targetNamespace = "urn:Invest">
            <xsd:import namespace = "http://schemas.xmlsoap.org/soap/encoding/"/>
            <xsd:import namespace = "http://schemas.xmlsoap.org/wsdl/"/>
            <xsd:complexType name = "ReturnItems">
                <xsd:sequence>
                    <xsd:element
                        name = "itemName"
                        type = "xsd:string"
                        minOccurs = "0"
                        maxOccurs = "unbounded"/>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:schema>
    </types>
    <message name = "ShowDataRequest">
        <part name = "no" type = "xsd:string"/>
        <part name = "user_name" type = "xsd:string"/>
    </message>
    <message name = "ShowDataResponse">
        <part name = "return" type = "tns:ReturnItems"/>
    </message>
    <portType name = "InvestPortType">
        <operation name = "ShowData">
            <input message = "tns:ShowDataRequest"/>
            <output message = "tns:ShowDataResponse"/>
        </operation>
    </portType>
    <binding name = "InvestBinding" type = "tns:InvestPortType">
        <soap:binding style = "document" transport = "http://schemas.xmlsoap.org/soap/http"/>
        <operation name = "ShowData">
            <soap:operation soapAction = "urn:Invest#ShowData" style = "rpc"/>
            <input>
                <soap:body use = "literal" namespace = "urn:Invest"/>
            </input>
            <output>
                <soap:body use = "literal" namespace = "urn:Invest"/>
            </output>
        </operation>
    </binding>
    <service name = "Invest">
        <port name = "InvestPort" binding = "tns:InvestBinding">
            <soap:address location = "http://test.com.tr/service.php"/>
        </port>
    </service>
</definitions>

当我通过“添加服务引用”从 vs2010 调用 ShowData 方法时,响应类型为字符串 [] 并始终返回字符串 [0]。此外,我在 SoapUi 中使用相同的参数调用此方法。由于以下原因返回给我;

请求 SoapUi:

<soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn = "urn:Invest">
<soapenv:Header/>
<soapenv:Body>
    <urn:ShowData>
        <no>475</no>
        <user_name>7302AEKI</user_name>
    </urn:ShowData>
</soapenv:Body>

响应 SoapUi:

<SOAP-ENV:Envelope
xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd = "http://www.w3.org/2001/XMLSchema"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC = "http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
    <ns1:ShowDataResponse xmlns:ns1 = "urn:Invest">
        <return>
            <item>
                <TAP>
                    <kod>
                        <item>768</item>
                    </kod>
                </TAP>
            </item>
            <item>
                <BASV>
                    <SUB>10</SUB>
                </BASV>
            </item>
            <item>
                <BASV>
                    <SIRK/>
                </BASV>
            </item>
            <item>
                <BASV>
                    <BASV_NO/>
                </BASV>
            </item>
            <item>
                <aaa>bbb</aaa>
            </item>
        </return>
    </ns1:ShowDataResponse>
</SOAP-ENV:Body>

因此,是否可以通过“添加服务引用”从 VS2010 调用此服务,或者应该是什么?

谢谢..

4

1 回答 1

0

据我所知,WSDL 和实际响应不匹配。要获得您期望的响应,请修复 WSDL 或响应。

于 2012-09-28T11:42:25.357 回答