2017-01-16 48 views
0

好日子亲爱的朋友。我打算调用PHP网络服务,使用net winform应用程序创建SoapServer。 PHP方法recieving XML字符串作为参数并返回JSON编码数组:从网络应用调用php web服务

function getPolicy($contentsXml) { 
     if ($everyting->isOK) { 
      $resultArr = createResultArray(); 
     }else{ 
      // Process errors 
     } 
     $result = json_encode($resultArr); 
     return $result; 
    } 

这是WSDL包含在PHP web服务我使用Web引用添加到视觉工作室:

<?xml version="1.0" encoding="utf-8"?> 
<wsdl:definitions name="XmlImportClaimWSDL" 
      targetNamespace="http://172.16.6.130/online/my.wsdl" 
      xmlns:tns="http://172.16.6.130/online/my.wsdl" 
      xmlns:xsd='http://www.w3.org/2001/XMLSchema' 
      xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" 
      xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
      xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
      xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> 

<wsdl:types> 
    <xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://tempuri.org/" > 
     <element name="getPolicy"> 
      <complexType> 
       <sequence> 
        <element minOccurs="0" maxOccurs="1" name="contentsXml" type="xsd:string" /> 
       </sequence> 
      </complexType> 
      </element> 
      <element name="getPolicyResponse"> 
      <complexType> 
       <sequence> 
        <element minOccurs="0" maxOccurs="1" name="contentsXml" type="xsd:json" /> 
       </sequence> 
      </complexType> 
     </element> 
    </xsd:schema> 
</wsdl:types> 
    <wsdl:message name="getPolicyRequest"> 
    <wsdl:part name="requestParam" type="xsd:string"/> 
    </wsdl:message> 
    <wsdl:message name="getPolicyResponse"> 
    <wsdl:part name="responseParam" type="xsd:string"/> 
    </wsdl:message> 
    <wsdl:portType name="ServerClaimSoapType"> 
    <wsdl:operation name="getPolicy"> 
     <wsdl:input message="tns:getPolicyRequest" /> 
     <wsdl:output message="tns:getPolicyResponse" /> 
    </wsdl:operation> 
    </wsdl:portType> 
    <wsdl:binding name="ServerClaimSoapBinding" type="tns:ServerClaimSoapType"> 
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/> 
    <wsdl:operation name="getPolicy"> 
     <soap:operation soapAction="http://php-server-address/"/> 
    <wsdl:input> 
     <soap:body use="literal" /> 
     </wsdl:input> 
    <wsdl:output> 
     <soap:body use="literal" /> 
     </wsdl:output> 
    </wsdl:operation> 
    </wsdl:binding> 
    <wsdl:service name="ServerClaim"> 
    <wsdl:port name="ServerClaimSoap" binding="tns:ServerClaimSoapBinding"> 
     <soap:address location="http://php-server-address/phpSoapService.php" /> 
    </wsdl:port> 
    </wsdl:service> 
</wsdl:definitions> 

正如我从提琴手可以看到的,PHP接收参数并返回正确的json对象,但在网络代码中结果始终为空。净代码:

PhpSoapObject client = new PhpSoapObject(); 
var result = client.getPolicy(PredifenedXmlString); 

所以结果变量总是空;我的猜测是wsdl绑定。我对这种情况进行了很多搜索。我已经意识到,使用PHP网络服务与网络框架没有nusoap记录非常差。感谢大家阅读这么长的问题。

回答

0

所以经过很多试验,现在一切都在运转。感谢Eclipse wsdl编辑器,继电器很棒的工具。

<?xml version="1.0" encoding="utf-8"?> 
<wsdl:definitions name="XmlImportClaimWSDL" 
      targetNamespace="http://172.16.6.130/online/" 
      xmlns:tns="http://172.16.6.130/online/" 
      xmlns:xsd='http://www.w3.org/2001/XMLSchema' 
      xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" 
      xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
      xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
      xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> 

<wsdl:types> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://172.16.6.130/online/" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" > 
    <xsd:element name="getPolicy"> 
      <xsd:complexType> 
       <xsd:sequence> 

        <xsd:element minOccurs="0" maxOccurs="1" name="contentsXml" type="xsd:string" /> 
       </xsd:sequence> 
      </xsd:complexType> 
      </xsd:element> 
      <xsd:element name="getPolicyResponse"> 
      <xsd:complexType> 
       <xsd:sequence> 

        <xsd:element minOccurs="0" maxOccurs="1" name="getPolicyResult" type="xsd:string" /> 
       </xsd:sequence> 
      </xsd:complexType> 
     </xsd:element> 
    </xsd:schema> 
</wsdl:types> 
    <wsdl:message name="getPolicyRequest"> 
    <wsdl:part name="requestParam" type="xsd:string"/> 
    </wsdl:message> 
    <wsdl:message name="getPolicyResponse"> 
    <wsdl:part name="responseParam" type="xsd:string"/> 
    </wsdl:message> 
    <wsdl:portType name="ServerClaimSoapType"> 
    <wsdl:operation name="getPolicy"> 
     <wsdl:input message="tns:getPolicyRequest" /> 
     <wsdl:output message="tns:getPolicyResponse" /> 
    </wsdl:operation> 
    </wsdl:portType> 
    <wsdl:binding name="ServerClaimSoapBinding" type="tns:ServerClaimSoapType"> 
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/> 
    <wsdl:operation name="getPolicy"> 
     <soap:operation soapAction="http://172.16.6.130/online/getPolicy" /> 
     <wsdl:input> 
      <soap:body use="literal" namespace="http://172.16.6.130/online/"/> 
     </wsdl:input> 
     <wsdl:output> 
      <soap:body use="literal" namespace="http://172.16.6.130/online/"/> 
     </wsdl:output> 
    </wsdl:operation> 
     </wsdl:output> 
    </wsdl:operation> 
    </wsdl:binding> 
    <wsdl:service name="ServerClaim"> 
    <wsdl:port name="ServerClaimSoap" binding="tns:ServerClaimSoapBinding"> 
     <soap:address location="http://172.16.6.130/phpSoapService.php" /> 
    </wsdl:port> 
    </wsdl:service> 
</wsdl:definitions> 

的主要问题是incorect 架构命名空间结合体命名空间丢失:如PHP WSDL应该被定义。我希望这会帮助某人。 P.S. Stackoverflow是搜索您的问题的最佳地点。