2011-03-11 35 views
1

我開發了一個WCF服務.NET4(SOAP),我試圖從Android使用它。 但是,我得到這個錯誤的問題:上傳文件來自android使用WCF服務和Ksoap2

org.xmlpull.v1.XmlPullParserException: expected: END_TAG {http://schemas.xmlsoap.org/soap/envelope/}Body (position:END_TAG @1:761 in [email protected])

在這一行:

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設備上傳文件到我的服務器)

回答

0

我試圖將相同的東西上傳到服務器的圖像..但我得到序列化異常而不是解析器異常。我在url中提到的方法名also.May是你的問題是......我不知道.....

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

嘗試實現它..

+0

這是多餘的,但將工作。 – 2013-06-19 07:01:33

0

你的錯誤是造成SOAP_ACTION:

在SOAP動作U註明:http://packagename/method,美調用

所以修改SOAP動作這樣的: 最後絃樂SOAP_ACTION = 「http://tempuri.org/extractText」; final String NAMESPACE =「http://tempuri.org/」;

,如果不工作與此嘗試:

最後絃樂SOAP_ACTION = 「http://tempuri.org/extractText」; final String NAMESPACE =「http://org.tempury/」;

希望它有幫助! 邁克!