2012-11-18 4 views
0

그래서 클라이언트 측에서 서비스로 이미지를 보내려고합니다.Restful service returns - System.Byte [] 유형의 객체의 시작 요소를 확인하는 중 오류가 발생했습니다. 예기치 않은 문자 'ÿ'가 발생했습니다.

[OperationContract] 
[WebInvoke(Method = "POST", UriTemplate = "Image")] 
Stream Image(byte [] Image); 

호출 클라이언트는 다음과 같습니다 :

public static byte[] ImageToByte(Image img) 
{ 
    ImageConverter converter = new ImageConverter(); 
    return (byte[])converter.ConvertTo(img, typeof(byte[])); 
} 

string uri = "http://localhost:8000/RestfulService/Image"; 

Bitmap img = new Bitmap("Random.jpg"); 
byte[] byteArray = ImageToByte(img); 

var request = WebRequest.Create(uri) as HttpWebRequest; 

if (request != null) 
{ 
    request.ContentType = "application/json"; 
    request.Method = "POST"; 
} 

if (request.Method == "POST") 
{ 
    request.ContentLength = byteArray.Length; 
    Stream postStream = request.GetRequestStream(); 
    postStream.Write(byteArray, 0, byteArray.Length); 
    postStream.Close(); 
} 

if (request != null) 
{ 
    var response = request.GetResponse() as HttpWebResponse; 

그것은 발생이 (구현 공상 아무것도없고, 그것은 너무 그 코드를 제외하고 거기에 도달하지 않음)처럼

서비스 정의가 보인다 마지막 행의 예외는

The remote server returned an error: (400) Bad Request.

나는 가능한 모든 것을 시도했다. 에 대해 생각할 수 :

request.ContentType

+0

ContentType을'application/xml'으로 설정했지만 xml이 아닌 원시 바이트 배열을 작성합니다. –

+0

죄송합니다. 절망에서 벗어났습니다. 나는 모든 종류의 오류를 얻었습니다. 내 첫 번째 솔루션과 오류를 반영하기 위해 제목과 코드를 약간 수정했습니다. –

답변

3

을 나는 비슷한 (원시 파일을 게시) 나는 스트림으로 입력을 허용하고있는 중이 야 어디 ([] 바이트되지 않음).

또한 "application/json; charset = utf-8"이 아마도 작동하지만 요청의 콘텐츠 유형이 application/octet-stream이 될 것으로 기대합니다.

이 테스트에서 Stream을 입력 매개 변수 유형 또는 WebInvoke 메서드의 반환 값으로 사용하면 요청/응답의 원시 본문을 얻는 것이 트릭입니다.

+0

고마워요! 둘의 조합. 반환 유형을 Stream으로 변경했습니다. 기쁨이 없습니다. 그런 다음 내용 유형을 application/octet-stream으로 변경하면 작동합니다. 내 서비스가 base64로 인코딩 된 버전의 이미지를 받아 스트림을 반환하기 전에 이것을 추측해야했습니다. 그것은 내가 문제가 된 매개 변수에 바이트 []를 도입했을 때입니다. –