异常从Android应用程序中的Web服务获取二进制文件

问题描述 投票:0回答:1

我正在尝试从我的.NET Web服务接收格式为base64array的图像。 如果我从Chrome浏览我的Web服务,则可以正常使用它们,但是当我使用kso​​ap2从Android应用程序调用它们时,会出现异常。

Chrome就是这样显示正确的base64array:

在此处输入图片说明

(是的,这三个图像是相同的,所以这三个base64array也相同)

这是我用来调用此Web服务的代码(我通常在使用其他Web服务):

envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = requestFotografias;
envelope.dotNet = true;
envelope.setOutputSoapObject(requestFotografias);

transporte = new HttpTransportSE(URL);
try 
{
   transporte.call(SOAP_ACTION_DOWNLOAD_PHOTO, envelope);
   SoapObject result = (SoapObject) envelope.getResponse(); //Exception in this line

   for (int i = 0; i < result.getAttributeCount(); i++) 
   {
      SoapObject object = (SoapObject) result.getAttribute(i);
      byte[] imagen = (byte[]) object.getAttribute(0);
      this.listaImagenes.add(imagen);
   }
} 
catch (Exception e) 
{
   correcto = false;
   System.out.println(e.toString());
}

这是我的网络服务(C#)的代码:

[WebMethod]
public List<Byte[]> DownloadImages(int idEstablecimiento)
{
   List<CAD.fotografia> listaFotografias = new List<CAD.fotografia>();
   listaFotografias = BLL.Fotografia.GetAllFotografiasFromEstablecimiento(idEstablecimiento);
   List<Byte[]> listaImagenes = new List<Byte[]>();

   foreach (CAD.fotografia fotografia in listaFotografias)
   {
      string path = fotografia.ruta_fotografia.ToString();
      FileStream objfilestream = new FileStream(path, FileMode.Open, FileAccess.Read);
      Byte[] imagen = new byte[objfilestream.Length];
      objfilestream.Read(imagen, 0, imagen.Length);
      listaImagenes.Add(imagen);
   }
   return listaImagenes;
}

我得到的例外是西班牙语,所以我不会在这里发布,但与System.FormatException和System.Number.StringToNumber相关,但由于我只使用二进制,所以意义不大。

编辑:这是完整的异常跟踪:

SoapFault - faultcode: 'soap:Client' faultstring: 'System.Web.Services.Protocols.SoapException: El servidor no puede leer la solicitud. ---> System.InvalidOperationException: Error en el documento XML (1, 336). ---> System.FormatException: La cadena de entrada no tiene el formato correcto.
en System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
en System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
en Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read12_DownloadImages()
en Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer4.Deserialize(XmlSerializationReader reader)
en System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
--- Fin del seguimiento de la pila de la excepción interna ---
en System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
en System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle)
en System.Web.Services.Protocols.SoapServerProtocol.ReadParameters()
--- Fin del seguimiento de la pila de la excepción interna ---
en System.Web.Services.Protocols.SoapServerProtocol.ReadParameters()
en System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()' faultactor: 'null' detail: org.kxml2.kdom.Node@42d06478

关于什么会导致此问题或如何对其进行调试的任何想法? 请记住,我可以访问同一服务器中的其他Web服务。

c# android .net web-services ksoap2
1个回答
1
投票

确保idEstablecimiento是一个int值。

© www.soinside.com 2019 - 2024. All rights reserved.