문제

ASMX 웹 서비스를 작업 중입니다. 서버에서 문서를 다운로드하고 브라우저에 문서를 표시하는 메소드를 작성하려고합니다 (Calling .aspx 웹 페이지). 내 서비스는 오류없이 구축되지만 프록시 클래스 프로젝트에서 "웹 참조"를 추가하려고 할 때 다음과 같은 오류가 발생합니다.

system.web.httpresponse는 매개 변수가없는 생성자가 없기 때문에 직렬화 할 수 없습니다.

.asmx 파일의 코드 스 니펫은 다음과 같습니다.

public class FileService : System.Web.Services.WebService
{
    [WebMethod]
    public void DownloadDocument(string URI, HttpResponse httpResponse)
    {
        int DownloadChunkSize = (int)Properties.Settings.Default.DownloadChunkSize;
        // some more code here....
        using (httpResponse.OutputStream)
        {
            // more code here...
        }
    }
}

웹 서비스에서 요청하는 웹 페이지로 httpresponse를 다시 보내는 방법에 대해 혼란스러워합니다. 누군가 나 에게이 작업을 수행하는 방법에 대한 팁을 주시겠습니까? 감사.

도움이 되었습니까?

해결책

웹 처리기 (.ASHX)를 살펴 봐야합니다. 그들은 당신이 달성하려는 것에 완벽합니다.

예를 들어:

public class Download : IHttpHandler, IRequiresSessionState {

    public void ProcessRequest(HttpContext context) {
        var pdfBytes = /* load the file here */
        context.Response.ContentType = @"Application/pdf";
        context.Response.BinaryWrite(pdfBytes);
        context.Response.End();
    }
}

업데이트:ASHX 핸들러는 실제로 ASPX로 교체됩니다. 기본적으로 UI는 없지만 여전히 ASPX 페이지와 마찬가지로 프로세스를 얻거나 게시합니다. 요점은 파일과 같은 간단한 콘텐츠를 반환하거나 빠른 작업을 수행하기 만하면 일반 ASPX 페이지를 실행하여 생성 된 오버 헤드를 줄이는 것입니다.

IREQUIRESSESSESSTATE 인터페이스를 사용하면 사이트의 다른 페이지와 같이 세션 객체를 사용할 수 있습니다. 필요하지 않으면 그대로 두십시오.

이 지역 하나를 만드는 방법에 대한 흥미로운 걸음을 가지고 있습니다. 아마 당신이 그것에 대해 신경 쓰지 않기 때문에 4 단계를 무시하십시오.

문서에 대한 링크가있는 일반 페이지 (ASPX)가 있다고 가정하면 ASPX 파일의 링크는 실제로 ASHX 핸들러를 직접 가리 킵니다. 예를 들어:

<a href="/document.ashx?id=blah">Click Here</a>

그런 다음 ASHX 핸들러의 프로세스 레퍼스트 메소드의 코드는 DLL과 같은 호출을 수행하여 문서를 찾아서 문서를 찾은 다음 Context.Response.binaryWrite Method Call을 통해 브라우저로 다시 스트리밍합니다.

다른 팁

그것은 표준 ASMX 웹 서비스가 작동하는 방식이 아닙니다. 자신의 핸들러를 만들거나 ASPX 페이지를 사용하여 문서를 전달하려면 괜찮지만이 작업을 수행하는 표준 ASMX 웹 서비스 방법은 실제로 문서의 비트를 인코딩 된 블로브로 반환하는 것입니다.

직접 굴려 보려면이 기사를 고려하십시오.http://msdn.microsoft.com/en-us/magazine/cc163879.aspx

ASMX의 웹 스모드 (ASMX)는 직렬화 될 수있는 객체를 반환합니다.

다음과 같은 방법을 만들어야합니다.

wbemethod] public byte [] downloaddocument (String URI)

또는 내용이 텍스트 인 경우 - 리턴 문자열입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top