2013-02-22 2 views
1

Существует веб-сервис, написанный на C# со следующим способом:Вызова WebMethod, содержащий массив байт (как и в paramaeter) параметр с ksoap2 на андроид

[WebMethod] 
public string ByteArrTest(byte[] Buffer) 
{ 
if (Buffer == null) return "buffer is null"; 
else return Buffer.Length.ToString() + " is buffer length"; 
} 

я «Ld, как вызов этого метода из андроидов устройства, используя библиотеку Ksoap2, так Белове (упрощенно):

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

new MarshalBase64().register(envelope); 
     envelope.encodingStyle = SoapEnvelope.ENC; 

SoapObject request = new SoapObject(this.getNameSpace(), this.getMethodName()); 

PropertyInfo pi4 = new PropertyInfo(); 
     pi4.setName("Buffer"); 
     byte [] b="this text".getBytes(); 
     pi4.setValue(b); 
    pi4.setType(byte[].class); 
// request.addProperty("buffer", "bytes".getBytes); 
request.addProperty(pi4); 
envelope.setOutputSoapObject(request); 
     HttpTransportSE androidHttpTransport = 
new HttpTransportSE(this.getURL());// 

androidHttpTransport.call(this.getSoapAction(), envelope); 
Object response = envelope.getResponse(); 
//next implementation 

Быстродействие всегда является «буфер нулевой» , что неправильно или не так? Спасибо за внимание

ответ

0

Проводка всего вашего метода в Android, вызывающем веб-службу, поможет больше.

Я использую KSoap в Android-проекте, над которым я сейчас работаю, и я извлекаю строки. Heres один из моих методов изменен в соответствии с тем, что вам нужно:

private static String NAMESPACE = "http://tempuri.org/"; 
private static String SOAP_ACTION = "http://tempuri.org/"; 
private static final String URL = "Your url link to your web services asmx file"; 

     public static String ByteArrTestCall(byte[] t) { 

    String resTxt = null; 
    SoapObject request = new SoapObject(NAMESPACE, "ByteArrTest"); 
    // Add the property to request object 
    request.addProperty("Buffer", t); 
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    envelope.dotNet = true; 
    envelope.setOutputSoapObject(request); 
    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
    androidHttpTransport.debug = true; 
    try 
    { 
    androidHttpTransport.call(SOAP_ACTION+"ByteArrTest", envelope); 
    SoapPrimitive receivedString = (SoapPrimitive) envelope.getResponse(); 
    resTxt = receivedString.toString(); 
    } 
    catch(Exception e) 
    { 
     resTxt = androidHttpTransport.requestDump; 
     return e.toString() + resTxt; 
    } 

    return resTxt; 
} 
Смежные вопросы