PDF, WCF и iFames - PullRequest
       44

PDF, WCF и iFames

1 голос
/ 14 мая 2011

Ну, теперь, когда я думаю, что я закончил с этим маленьким проектом, меня бросают в другую кривую ...

У меня есть два WCF. Один размещен в IIS, а другой - в автономной службе на другом сервере.

Функция в автономном сервисе возвращает PDF в форме Byte (). WCF в IIS вызывает функцию, а затем использует System.IO.FileStream для записи PDF в intepub. Aspx выполняет обратный вызов, и страница перезагружается с динамическим iFrame, отображающим PDF. Работает достаточно хорошо для меня, но недостаточно хорошо для босса.

Почему-то мне нужно заставить второй WCF передать PDF обратно в мое ASP-приложение, БЕЗ его сохранения на диск.

Мне нужно что-то вроде:

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

Есть ли способ сделать это?

Спасибо заранее, Jason

Ответы [ 2 ]

1 голос
/ 14 мая 2011

Если я правильно вас понимаю, на странице ASPX есть какое-то действие, которое вызывает вызов (возможно, передача какого-либо параметра) первой службы (WCF1, размещенной в IIS), которая, в свою очередь, вызывает вторую службу (WCF2, с другой машины);WCF1 извлекает PDF из WCF2, сохраняет его локально в inetpub и возвращает URL сохраненного файла;обратный вызов на странице ASPX затем использует этот URL для отображения PDF в iFrame.

Краткий ответ: вы не можете использовать ссылку на службу, чтобы делать то, что вам нужно (ServiceReference1.GetPDF_Byte ()) -атрибут «src» для элемента управления (или для любого XML) должен быть строкой, которая в этом случае представляет URL-адрес ресурса, который является фактическим источником для элемента управления.Однако вы можете использовать WCF для реализации этого - конечную точку REST в «сыром» режиме (http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-web.aspx) можно использовать для возврата файла PDF.

Вы изменили бы структуру вашего приложения следующим образом:некоторые действия на странице ASPX приводят к тому, что он не выполняет непосредственный вызов WCF1, а просто устанавливает для свойства src элемента управления iFrame значение вызов конечной точки REST в WCF1 .параметров, и вызов WCF2 для извлечения файла PDF, и этот вызов вернет файл PDF напрямую (в виде потока). Таким образом, вы не несете затрат на буферизацию, которые были бы в вашем буферном решении (если многие клиенты запрашиваютна странице одновременно могут возникнуть проблемы с памятью, и в этом случае вам также не нужно управлять временем жизни буфера).

0 голосов
/ 14 мая 2011

Нашел его где-то еще в C и выполнил конвертацию, разместив здесь на всякий случай, если это кому-то еще нужно.

Ответ: Создайте новый класс (Globals.vb) для размещения байтового массива, к которому можно получить доступ с обеих страниц, затем создайте новую страницу и выполните ответ. Дублируйте свой байтовый массив в Page Load и установите src iFrame. на новую (пустую) страницу.

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
...