2011-12-23 2 views
1

WCF rest 서비스를 사용하여 바이트 arrray 파일을 보내야합니다. 안드로이드에서 HttpPost 메서드를 사용하여 데이터를 보내야합니다. 내가 사용하는 코드는 HTTP/1.1 400 잘못된 요청 오류로 상태를 제공합니다.Android에서 ByteArray를 WCF REST 서비스로 업로드

private final static String URI = "http://192.168.1.15/QueryService/Import/Test"; 
     final HttpPost request = new HttpPost(URI); 
      final HttpClient httpClient = new DefaultHttpClient(); 
      final ByteArrayEntity entity = new ByteArrayEntity(fileToBytes(pathToOurFile)); 
      entity.setContentType("application/octet-stream"); 
      entity.setChunked(true); 
      request.setEntity(entity); 
      final HttpResponse hr = httpClient.execute(request); 
      final StatusLine status = hr.getStatusLine(); 
     httpClient.getConnectionManager().shutdown(); 

답변

1

귀하의 요청에 무엇이 잘못되었는지를 말하기 어렵습니다. 이러한 종류의 오류를 해결하는 표준 방법은 다음과 같습니다.

  • 서비스에 대한 WCF 클라이언트를 만듭니다. 예상대로 작동하는지 확인하십시오.
  • Fiddler 또는 다른 적절한 도구를 사용하여 클라이언트가 생성하는 HTTP 요청을 가로 채십시오. 헤더와 본문 모두 중요합니다.
  • WCF 클라이언트와 완전히 동일한 요청을 생성하도록 Android 요청을 수정하십시오.
+0

나는 Fiddler를 사용하지만 응용 프로그램에서 작성한 http 요청을 표시하지 않습니다. 나는 또한 에뮬레이터 프록시를 피들러 IP 주소로 변경했다. 에뮬레이터를 통해 웹 사이트를 탐색 할 때 Fiddler에 표시되지만 내 응용 프로그램 요청을 피들러에 표시하지 않습니다. 또한 StringEntity에 대해 동일한 코드가 작동하지만 Fiddler에서 모든 프로세스를 표시하지 않습니다. – saini

+0

이것은 에뮬레이터 문제와 유사합니다. 중간 클라이언트를 사용하여 요청을 쉽게 인터셉트 할 수 있습니다. 나는 이것을 위해 과거에 성공적으로 http://code.google.com/p/tcpmon/을 사용했습니다. – kgiannakakis

+0

나는 서비스 요청을 보낼 수 있지만 내가 보내는 요청이 웹 서비스에서 수신해야하는 적절한 형식이 아닌 것 같습니다. 또한 다중 형식을 통해 스트림 형식으로 데이터를 보내려고하지만 모든 응답을받지 못합니다. – saini

0

WCF 서비스에서도 동일한 문제가 발생했습니다. 400 잘못된 요청은 메서드에 전달할 요청 매개 변수 값이 메서드의 매개 변수와 일치하지 않는다는 것을 의미합니다. Base64 문자열 인코딩을 사용하여 메서드 매개 변수로 파일을 전달했습니다. 그것이 당신을 도울 수 있습니다.