2011-02-08 18 views
0

.NET SOAPサーバーを使用するアプリケーションを構築しています。クライアントはCodeIgniterで構築されており、標準PHP SOAPライブラリを使用しました。SOAP .NETサーバー、PHPクライアント、xmlエラー

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> 

私はなぜそれが不思議ですか? 何か助けがよかったです。

答えて

0

文字列の変換に失敗したようです。多分空のid?

+0

id値を設定してみました。同じこと – Dawid

関連する問題