2011-05-13 3 views
1

글쎄 지금, 단지 그들이 나에게 또 다른 커브를 던져 ...PDF 파일, WCFs 및 iFames

나는 두 WCFs 있습니다. 하나는 IIS에서 호스팅되고 다른 하나는 다른 서버에서 자체 호스팅 서비스에 있습니다.

자체 호스팅 서비스의 함수는 Byte() 형식의 PDF를 반환합니다. IIS의 WCF가 함수를 호출 한 다음 System.IO.FileStream을 사용하여 PDF를 intepub에 씁니다. aspx는 콜백을 수행하고 pdf를 표시하는 동적 iFrame으로 페이지가 다시로드됩니다. 저를 위해 충분히 잘 작동하지만 사장님에게는 충분하지 않습니다.

어쨌든 디스크에 저장하지 않고 PDF를 내 ASP 응용 프로그램으로 다시 전달해야하는 두 번째 WCF를 가져와야합니다.

iFrameControl.Attributes.Add("src", ServiceReference1.GetPDF_Byte()) 

이 작업을 수행 할 수있는 방법 :

내가 좋아하는 뭔가가 필요? 사전에

감사합니다, 제이슨

답변

0

단지의 경우 다른 사람이 그것을 필요로 여기에 게시, 변환을 C에서 다른 곳을 발견했다.

답변 : 두 페이지에서 액세스 할 수있는 바이트 배열을 저장할 새 클래스 (Globals.vb)를 만든 다음 새 페이지를 만들고 response.Binary 바이트 배열을 페이지로드에 작성하고 iFrame을 설정합니다 src를 새로운 (공백) 페이지에 추가하십시오. 내가 전화를 (아마도 몇 가지 매개 변수를 전달) (IIS에서 호스팅 WCF1) 첫 번째 서비스로 만들 수, 원인이 ASPX 페이지에서 어떤 행동이, 제대로 이해하면

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    Response.Clear() 
    Response.Buffer = True 
    Response.ContentType = "application/pdf" 
    Response.BinaryWrite(Globals.PDF_Data.ToArray) 

End Sub 
+1

이렇게하면 버퍼링을 디스크 (inetpub)에서 메모리로 이동하게됩니다. 1 개의 PDF 파일 만 제공하면 괜찮습니다. 그러나이 글로벌 솔루션으로 여러 파일을 제공해야한다면 몇 가지 경쟁 조건이 발생할 수 있습니다 (두 명의 고객이 서로 다른 파일을 얻으려고하면 다른 파일을 덮어 쓰게됩니다) – carlosfigueira

+0

한 번에 1 pdf 만 가능하므로이 예제는 아름답게 작동했습니다. 고마워요, 큰 도움이되었습니다! –

1

차례로 호출에 두 번째 서비스 (다른 컴퓨터의 WCF2). WCF1은 WCF2에서 PDF를 검색하여 inetpub에 로컬로 저장하고 저장된 파일의 URL을 반환합니다. ASPX 페이지의 콜백 호출은 해당 URL을 사용하여 iFrame에 PDF를 표시합니다.

간단한 답변 : 서비스 참조를 사용하여 필요한 작업을 수행 할 수 없습니다 (ServiceReference1.GetPDF_Byte()). 컨트롤 (또는 모든 XML)의 "src"속성은 문자열이어야합니다. 이 경우 제어의 실제 소스 인 자원의 URL을 나타냅니다. 그러나 WCF를 사용하여이를 구현할 수 있습니다. "원시"모드의 REST 끝점 (http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model) -web.aspx)를 사용하여 PDF 파일을 반환 할 수 있습니다.

다음과 같이 응용 프로그램의 구조가 변경됩니다. ASPX 페이지의 일부 동작은 WCF1을 직접 호출하지 않고 iFrame 컨트롤의 "src"속성을 으로 설정하기 만하면됩니다. WCF1의 REST 엔드 포인트. 이 호출은 매개 변수를 사용하고 PDF 파일을 검색하기 위해 WCF2를 호출하며 해당 호출은 직접 PDF 파일을 스트림으로 리턴합니다. 이렇게하면 버퍼 솔루션에서 버퍼링 비용이 발생하지 않습니다 (많은 클라이언트가 동시에 메모리 문제를 겪을 수있는 페이지를 요청하는 경우이 경우 버퍼 수명을 관리 할 필요가 없습니다.).