在android中调用包含ksoap2的字节数组(如参数)参数的Webmethod

时间:2013-02-22 10:44:00

标签: ksoap

使用下一种方法在C#上编写WEB服务:

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

我想用Android设备调用这个方法,使用Ksoap2库像belove(简化):

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 

响应总是“缓冲区为空” 什么是不正确或错误的? 感谢您的关注

1 个答案:

答案 0 :(得分:0)

在Android中发布您调用网络服务的整个方法会有所帮助。

我在Android项目中使用KSoap我目前正在处理并且我正在检索字符串。下面是我修改的一个方法,以满足您的需求:

    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;
}