2016-10-19 2 views
1

나는 입력 매개 변수로서 커스텀 클래스를받는 'wcf'rest 서비스를 가지고 있습니다. 안드로이드 플랫폼을 통해이 클래스 객체 데이터를 보내려고합니다. 나는 httpUrlConnection을 사용했다. 나는 항상 응답 코드 500을 받는다. 그러나 서비스는 윈도우 폼 애플리케이션에서 올바르게 작동했다. 안드로이드에 내 코드는 여기에 있습니다 :android에서 wcf로 json을 보내십시오.

 HttpURLConnection urlConnection = null; 
     String jsonString = ""; 
     JSONObject jsonObject = new JSONObject(); 
     JSONObject jsonObject2 = new JSONObject(); 
     try { 

      jsonObject.put("A","rtrt"); 
      jsonObject2.put("c",jsonObject); 
       } catch (JSONException e) { 
       e.printStackTrace(); 
       } 


     try{ 
      URL url = new URL("http://.../Service1.svc/GetTestData"); 
      urlConnection = (HttpURLConnection) url.openConnection(); 
      urlConnection.setDoOutput(true); 
      urlConnection.setDoInput(true); 
      urlConnection.setRequestMethod("POST"); 
       urlConnection.setRequestProperty("ContentType","applicaiton/json"); 


      urlConnection.setUseCaches(false); 

     urlConnection.connect(); 

      OutputStream outputStream = new BufferedOutputStream(urlConnection.getOutputStream()); 
      BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, "utf-8")); 
      writer.write(jsonObject2.toString()); 
      writer.flush(); 
      writer.close(); 
      outputStream.close(); 

     int statusCode = urlConnection.getResponseCode(); 

      // Log.d("TRAFFIC", "err: " + urlConnection.getErrorStream().toString()); 

답변

0

WCF는 SOAP 유형의 데이터

사용 Ksoap2 라이브러리

public class ksop2test extends Activity { 
/** Called when the activity is first created. */ 


private static final String METHOD_NAME = "HelloWorldRequest"; 
// private static final String METHOD_NAME = "HelloWorld"; 

private static final String NAMESPACE = "http://tempuri.org/"; 
// private static final String NAMESPACE = "http://tempuri.org"; 

private static final String URL ="http://192.168.0.2:8080/HelloWCF/Service1.svc"; 
// private static final String URL = "http://192.168.0.2:8080/webservice1 /Service1.asmx"; 

final String SOAP_ACTION = "http://tempuri.org/IService1/HelloWorld"; 
// final String SOAP_ACTION = "http://tempuri.org/HelloWorld"; 
TextView tv; 
StringBuilder sb; 
private XmlSerializer writer; 



@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    tv = new TextView(this); 
    sb = new StringBuilder(); 
    call(); 
    tv.setText(sb.toString()); 
    setContentView(tv); 
} 

public void call() { 
try { 

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

    request.addProperty("Name", "Qing"); 

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


    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
    androidHttpTransport.call(SOAP_ACTION, envelope); 
    SoapPrimitive result = (SoapPrimitive)envelope.getResponse(); 

    //to get the data 
    String resultData = result.toString(); 
    // 0 is the first object of data 


    sb.append(resultData + "\n"); 
    } catch (Exception e) { 
    sb.append("Error:\n" + e.getMessage() + "\n"); 
    } 

} 

} 

전체 튜토리얼을 사용할 수 here

+0

올바르지 않습니다. 바인딩을 변경하고 webhttpbinding으로 설정하면 Wcf가 지원됩니다. –

+0

나는 안드로이드 개발자뿐만 아니라 .NET입니다. 오래 전이 문제에 직면 해 있으며 Ksoap2가 해결책입니다. –

0

드디어 발견 대답을 받아들입니다. HttpUrlConnection에서 입력 스트림을 읽는 출력 스트림을 닫지 않아야합니다. 그래서 모든 출력 스트림을 닫았습니다.

관련 문제