【问题标题】:SOAP .NET server, PHP client, xml errorSOAP .NET 服务器、PHP 客户端、xml 错误
【发布时间】:2011-02-08 11:01:59
【问题描述】:

我正在构建一个使用 .NET SOAP 服务器 的应用程序。客户端内置在 CodeIgniter 中,我使用 标准 PHP SOAP 库

new SoapClient('urlToWSDL',array('soap_version'=>SOAP_1_2, 'exceptions'=>true, 'trace'=>1, 'cache_wsdl'=>WSDL_CACHE_NONE));

<s:element name="evaluateOperator">
  <s:complexType>
    <s:sequence>
      <s:element minOccurs="0" maxOccurs="1" name="comment" type="tns:comments"/>
    </s:sequence>
  </s:complexType>
</s:element>

<s:complexType name="comments">
  <s:sequence>
    <s:element minOccurs="1" maxOccurs="1" name="id" type="s:long"/>
    <s:element minOccurs="1" maxOccurs="1" name="added_by" type="s:long"/>
    <s:element minOccurs="1" maxOccurs="1" name="posted" type="s:dateTime"/>
    <s:element minOccurs="0" maxOccurs="1" name="text" type="s:string"/>
    <s:element minOccurs="1" maxOccurs="1" name="parcelID" type="s:long"/>
    <s:element minOccurs="1" maxOccurs="1" name="evalTimeliness" type="s:float"/>
    <s:element minOccurs="1" maxOccurs="1" name="evalQoS" type="s:float"/>
  </s:sequence>
</s:complexType>

当我在 PHP 中调用此方法时,我收到一个错误。

$comment = array(
    'id' => null,
    'added_by' => 2,
    'posted' => date('d-m-Y'),
    'text' => "test",
    'parcelID' => 1,
    'evalTimeliness' => 2,
    'evalQoS' => 3
);
$this->client->evaluateOperator(array('comment'=>$comment));

SoapFault exception: [soap:Sender] System.Web.Services.Protocols.SoapException: Server was unable to read request. ---> System.InvalidOperationException: There is an error in XML document (2, 153). ---> System.FormatException: Input string was not in a correct format.
   at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   at System.Number.ParseInt64(String value, NumberStyles options, NumberFormatInfo numfmt)
   at System.Xml.XmlConvert.ToInt64(String s)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read9_comments(Boolean isNullable, Boolean checkType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read93_evaluateOperator()
   at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer136.Deserialize(XmlSerializationReader reader)
   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
   --- End of inner exception stack trace ---
   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle)
   at System.Web.Services.Protocols.SoapServerProtocol.ReadParameters()
   --- End of inner exception stack trace ---
   at System.Web.Services.Protocols.SoapServerProtocol.ReadParameters()
   at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()

发送到服务器的 XML 看起来是正确的。

<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://inetpost.pl">
  <env:Body>
    <ns1:evaluateOperator>
      <ns1:comment>
        <ns1:id/>
        <ns1:added_by>2</ns1:added_by>
        <ns1:posted>08-02-2011</ns1:posted>
        <ns1:text>idsuhffeiuhfadsihdfsiu</ns1:text>
        <ns1:parcelID>1</ns1:parcelID>
        <ns1:evalTimeliness>2</ns1:evalTimeliness>
        <ns1:evalQoS>3</ns1:evalQoS>
      </ns1:comment>
    </ns1:evaluateOperator>
  </env:Body>
</env:Envelope>

我想知道为什么会这样。 任何帮助都会很好。

【问题讨论】:

    标签: php .net xml soap


    【解决方案1】:

    嗯,看起来字符串->数字转换失败。也许是空 id?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多