2014-11-11 1 views
3

대신 (SOAP의 XML로) 웹 메소드 자체에 이진 스트림을 (MTOM/Base64로 인코딩 된)가 반환 예 :ASMX 웹 서비스가 Response.BinaryWrite로 응답 할 수 있습니까?

[WebMethod] 
public byte[] Download(string FileName) 
.... 
return byteArray; 

수 (어쩌면 Server 객체를 통해)와 어떻게 든이 방법의 응답?

Response.BinaryWrite(byteArray); 

의사 : 당신은 아마 별도의 IHttpHandler를 대신 웹 방법을 쓰고 싶어 한 BinaryWrite하고 싶은 경우

[WebMethod] 
public DownloadBinaryWrite(string FileName) 
... 
Response.BinaryWrite(byteArray); 
+0

이 질문에 대한 답변 : http://stackoverflow.com/q/1975268/114267 –

답변

7

예, 가능합니다. 참고 우리는 응답에 직접 쓰고 있기 때문에 반환 형식을 void로 변경하고 있습니다. 콘텐츠 형식을 수동으로 설정하고 응답을 끝내야합니다.

[WebMethod] 
public void Download(string FileName) 
{ 
    HttpContext.Current.Response.ContentType="image/png"; 
    HttpContext.Current.Response.BinaryWrite(imagebytes); 
    HttpContext.Current.Response.End(); 
} 

주 (당신이 SOAP 지원을 필요로하는 경우)의 WebMethod가 not really supported 요즘, 당신은 Web API 또는 WCF로 전환해야합니다.

+0

나는 그것을 시도하고 당신이 정확합니다. 아직도 비누 방울을 보내지 않는 비누 방울을 보내는 것은 이상한 것 같습니다. 물론 일반 SOAP 클라이언트와 상호 운용 할 수는 없지만, 필요하지 않다면 왜 신경 써야할까요? 호출자가 .NET Web Reference와 같은 SOAP을 예상하면 혼란 스러울 수 있습니다. (나도 그렇게까지 시도하지 않았지만 어쩌면 작동 할 수도 있지만 거의 없을 것 같습니다). –

+0

'Response'은 유효한 객체로 인식되지 않습니다. – zig

+1

@zig 그런 다음'HttpContext.Current.Response'를 사용하십시오. – mason

0

. 웹 메소드는 SOAP 요소를 중심으로하므로 가능한 한 맞춤 응답으로 해킹하는 것이 이상합니다.

+0

웹 서비스 자체에서이를 유지해야합니다. 또는 적어도 같은 ASMX에서 (나는 그것을 피하고 싶다). – zig