2016-04-16 3 views
1

Я новичок в разработке Android. Сегодня я использую KSOAP2 для использования WCF, который я закончил на сервере. Во-первых, я пытаюсь использовать WCF в форме окна. Он работает нормально, и данные загружаются. Затем я использую WCF с KSOAP2. Строка не может послать хорошо, и ошибка: Метод бросил исключение «org.ksoap2.SoapFault». Отсоединение ошибки: a: InternalServiceFault Значение не может быть пустым. Имя параметра: sAndroid использовать WCF (webservice)

У меня нет параметра с именем 's' в программе сервера и программе Android. Видение .NET - это рама 4.0. Если я использую .NET framework 4.5, андроид может использовать его с KSOAP2. Однако, я должен использовать 4.0 Как я могу решить эту проблему? Cheers.

Код в андроида показано ниже:

transferthread = new Thread(new Runnable() { 
      @Override 
      public void run() { 
       while (true) 
       { 

         SoapObject request = new SoapObject(NAMESPACE,METHOD_NAME); 
         int a = 1; 
         request.addProperty("userid",a); 
         request.addProperty("healthData",info); 
         SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10); 
         envelope.dotNet = true; 
         envelope.bodyOut = request; 
         envelope.setOutputSoapObject(request); 
         HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
         androidHttpTransport.debug = true; 
         try { 
          androidHttpTransport.call(SOAP_ACTION, envelope); 
          // final SoapPrimitive result = (SoapPrimitive)envelope.getResponse(); 
          envelope.getResponse(); 
          Log.e("str",envelope.getResponse().toString()); 
          a=1; 
          //Log.e("aaa",envelope.getResponse().toString()); 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } catch (XmlPullParserException e) { 
          e.printStackTrace(); 
         } 



        try { 
         Thread.sleep(5000); 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 


       } 

      } 
     }); 
     transferthread.start(); 

Я думаю, что это проблема ksoap2.

ответ

0

Мой ответ - еще одно альтернативное решение для вашего вопроса о том, как использовать Android для использования WCF. Я пытался попробовать KSOAP2. По какой-то причине (я забыл) я отказываюсь от его использования.

Это то, что я делаю, чтобы сделать то же самое.

Вы можете установить Wizdler (расширение Chrome) для создания конверта. и скопируйте пасту в код конверта.

Вызовите getYourData в своей асинтете.

public ArrayList<YourData> getYourData(String username, String password) { 
ArrayList<YourData> resultList; 
String resultData; 
try { 
    //Put your envelope here. 
    final String envelope = "<Envelope xmlns=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" + 
      " <Body>\n" + 
      "  <Something xmlns=\"http://www.example.com/RemoteServices/url/\">\n" + 
      "   <!-- Optional -->\n" + 
      "   <request>\n" + 
      "    <Authentication xmlns=\"http://schemas.datacontract.org/RemoteServicesv2.Core\">\n" + 
      "     <Password>" + 
      password + 
      "</Password>\n" + 
      "     <Username>" + 
      username + 
      "</Username>\n" 
      "  </Something>\n" + 
      " </Body>\n" + 
      "</Envelope>"; 

    resultData = CallWebService(URL, "http://www.example.com/webserviceURL", envelope); 
    Log.e("resultData for Something", ""+resultData); 
    resultList = parseFunction(resultData); 
} catch (Exception e) { 
    resultList = null; 
} 
return resultList; 

}

// How to send SOAP envelope to web service 
private String CallWebService(String url, 
           String soapAction, 
           String envelope) { 
    final DefaultHttpClient httpClient = new DefaultHttpClient(); 
    // request parameters 

    HttpParams params = httpClient.getParams(); 
    HttpConnectionParams.setConnectionTimeout(params, 20000); 
    HttpConnectionParams.setSoTimeout(params, 25000); 
    // set parameter 
    HttpProtocolParams.setUseExpectContinue(httpClient.getParams(), true); 

    // POST the envelope 
    HttpPost httppost = new HttpPost(url); 
    // add headers 
    httppost.setHeader("soapaction", soapAction); 
    httppost.setHeader("Content-Type", "text/xml; charset=utf-8"); 

    String responseString = ""; 
    try { 

     // the entity holds the request 
     HttpEntity entity = new StringEntity(envelope); 
     httppost.setEntity(entity); 

     // Response handler 

     ResponseHandler<String> rh = new ResponseHandler<String>() { 
      // invoked when client receives response 

      public String handleResponse(HttpResponse response) 
        throws ClientProtocolException, IOException { 

       // get response entity 
       HttpEntity entity = response.getEntity(); 


       // read the response as byte array 
       StringBuffer out = new StringBuffer(); 
       byte[] b = EntityUtils.toByteArray(entity); 

       // write the response byte array to a string buffer 
       out.append(new String(b, 0, b.length)); 

       return out.toString(); 
      } 
     }; 

     responseString = httpClient.execute(httppost, rh); 


    } catch (Exception e) { 
     Log.v("exception", e.toString()); 
    } 

    String xml = responseString.toString(); 
    // close the connection 
    System.out.println("xml file ------" + xml); 
    httpClient.getConnectionManager().shutdown(); 
    return responseString; 
}