使用WCF服务和Ksoap2从android上传文件

时间:2011-03-11 17:37:39

标签: android wcf file upload

我开发了一个WCF服务.NET4(SOAP),我试图从Android中使用它。 但是我得到这个错误的问题是:

  

org.xmlpull.v1.XmlPullParserException:   预期:END_TAG   {http://schemas.xmlsoap.org/soap/envelope/}Body   (位置:END_TAG   @ 1:761   在java.io.InputStreamReader@437c3ff0)

在这一行:

androidHttpTransport.call(SOAP_ACTION, envelope);

这是我的代码:

private static final String SOAP_ACTION = "http://tempuri.org/OCRWebService/extractText";
private static final String METHOD_NAME = "extractText";
private static final String NAMESPACE = "http://tempuri.org/";
private static final String URL = "http://10.0.2.2/ocrwebservice/Service.svc";
private String extractText(byte[] _data){
     try {

            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
            PropertyInfo p1=new PropertyInfo();
            p1.setName("image2up");
            p1.setType(_data);
            request.addProperty(p1);
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.dotNet=true;
            envelope.setOutputSoapObject(request);
            AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(URL);
            androidHttpTransport.debug=true;
            androidHttpTransport.call(SOAP_ACTION, envelope);  // error here
            SoapObject result=(SoapObject)envelope.getResponse();
            String resultData=result.getProperty(0).toString();

        } catch (Exception e) {
           Log.i("123",e.getMessage());
            }
    return "false";

}

(有关信息:我想使用wcf servcice将文件从Android设备上传到我的服务器)

3 个答案:

答案 0 :(得分:0)

我尝试将相同的内容上传到服务器。但是我得到了序列化异常而不是解析器异常。我也在网址中提到了方法名称。可能你的问题是......我不确定.....

答案 1 :(得分:0)

public void testWebService(Bitmap bmp)
{
    MarshalBase64 marshal = new MarshalBase64();
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    bmp.compress(CompressFormat.PNG, 100, out);
    byte[] raw = out.toByteArray();
    SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE, OPERATION_NAME);
    request.addProperty("image", raw);
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);
    marshal.register(envelope);
    HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS);
    try
    {
        httpTransport.call(SOAP_ACTION, envelope);
        Object response = envelope.getResponse();
    }
    catch (Exception exception)
    {
        exception.printStackTrace();
    }
} 

尝试实现它..

答案 2 :(得分:0)

您的错误是由SOAP_ACTION引起的:

在SOAP操作中,您指定:http://packagename/method,您调用

所以将SOAP操作修改为: final String SOAP_ACTION =“http://tempuri.org/extractText”; final String NAMESPACE =“http://tempuri.org/”;

如果不起作用请尝试:

final String SOAP_ACTION =“http://tempuri.org/extractText”; final String NAMESPACE =“http://org.tempury/”;

希望它有所帮助! 迈克!