powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / SL4, RIA - как показать пользователю PDF из БД?
6 сообщений из 6, страница 1 из 1
SL4, RIA - как показать пользователю PDF из БД?
    #37558150
dayone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Задача -
1) загрузить на сервер произвольный документ (pdf, jpg, docx... - что угодно) и положить в БД. С этим более-менее ясно.
2) при надобности - показать его пользователю. Не "выгрузить с сервера на диск и пусть открывает сам нужной программой", а сразу открыть в окне, пусть с ходу смотрит.

При использовании традиционного web-сервиса я заставлял один из методов сервиса полностью сформировать web-страницу, на клиенте склеивал URL на нужный метод сервиса с нужнм параметром, открывал новое окно браузера с этим url'ом, и браузер дальше разбирался с pdf-ками (jpeg-ами etc) сам.

Но вот как сделать то же самое в RIA с DomainService'ом на базе EDM - не соображу. WSDL тщательно упрятан, где что искать?...

Как водится, все это нужно было позавчера, и если кто бросит прямо работающие кусочки C# кода для сервера и клиента - будет замечательно.
...
Рейтинг: 0 / 0
SL4, RIA - как показать пользователю PDF из БД?
    #37558153
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какое отношение RIA, да еще с DomainService, имеют к показу PDF документов? Никакого, он для этого не предназначен
...
Рейтинг: 0 / 0
SL4, RIA - как показать пользователю PDF из БД?
    #37558254
dayone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интернет говорит, что RIA есть тот же WCF сервис, т.е. умеет отдавать информацию не только SL-клиентам, но вообще кому угодно, только обратись к домен-сервису по правильному урлу, и получишь в ответ, скажем, кусок XMLя.
(Microsoft'овцы что-то бодро вещали про OData, и что-то там еще)

Соответственно, я бы хотел понять, как мне оформить HTTP-урл к какому-нибудь методу доменсервиса, который можно было бы научить при обращении к нему - выливать в HTTP-ответ бинарный поток. Напрямую через HTTP, в обход SL-клиентов.
А типовой браузер, увидев перед потоком тег content-type (мой метод конечно его впишет), сам решит и сам покажет.

На эти мысли меня навели статьи

http://www.silverlightshow.net/items/WCF-RIA-Services-Part-10-Exposing-Domain-Services-To-Other-Clients.aspx
http://blogs.msdn.com/b/brada/archive/2009/11/22/ria-services-a-domainservice-is-a-wcf-service-add-service-reference.aspx

но с тех времен wsdl видимо как следует укрыли, или тямы нехватает, и повторить фокус у меня не вышло. А надо.
Поможите люди добрые кто чем.
Скажите как должен выглядеть урл метода (ну хоть типового query с entity'ями), чтобы можно было прочитать ответ не через SL-клиента, и какими атрибутами его декорировать.
...
Рейтинг: 0 / 0
SL4, RIA - как показать пользователю PDF из БД?
    #37558348
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wcf.codeplex.com
...
Рейтинг: 0 / 0
SL4, RIA - как показать пользователю PDF из БД?
    #37779883
dayone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну что ж, через полгода отвечу себе сам. Вдруг кому надо. Реализация корявоватая, кому надо - пусть допиливает сам.
Напомню, что
- предполагалось показать документ в окне браузера путем записи в Response бинарного потока из БД, и сообщения браузеру mime-типа содержимого (application/pdf, image/png...), а дальше браузер обычно успешно справляется, так или иначе
- главным было желание сосредоточить обращение к конкретной БД в одном модуле (именно - в EDM) для простоты переноса приложения, и в одном проекте - для простоты разработки/сопровождения.

а) в БД есть процедура, достающая скан, со служебными полями типа заранее сформированного mime-тега, имени файла и т.п.

CREATE PROCEDURE [dbo].[Doc_ScanGetById]
@ScanId int
AS

select
Id, TypeTag , [FileName] , FileExtention,
FileSize , DateDoc , Descr ,ScanBlob AS [Binary]
from [dbo].[DOC_SCAN]
where ID=@ScanId

б) на серверной стороне приложения
в стандартной EDM эта процедура подцеплена, импортирована в функцию, функция отдает набор записей комплексного типа STUB_Scan
в DomainService это описано как

public IQueryable<STUB_Scan> Get_DocScanById(int Id)
{
return this.ObjectContext.SP_Doc_ScanGetById(Id).AsQueryable();
}

в) в MyApp.Web добавлен обычный webservice MyWebService.asmx

using MyApp.Web.Models;
using MyApp.Web.Domains;
using System.ServiceModel.DomainServices.EntityFramework;


[WebMethod]
public void GetScanAsFile(string ScanId)
{

MyDomainService domain = new MyDomainService();
string typetag = "text/plain"; int size;
IQueryable<STUB_Scan> ResultSet;
STUB_Scan Res = null;
this.Context.Response.ContentType = typetag;

try {
ResultSet = domain.Get_DocScanById(Convert.ToInt32(ScanId));
Res = ResultSet.First(); }
catch
{
this.Context.Response.Write(" HET DOKYMEHTA ");
this.Context.Response.End();
return;
};

try
{
typetag = Res.TypeTag;
size = Res.Binary.Length;
this.Context.Response.ContentType = typetag;
this.Context.Response.OutputStream.Write(Res.Binary, 0, size);
}
catch (Exception E)
{
this.Context.Response.Write(E.Message);
}
this.Context.Response.End();

}

г) на клиентской стороне создаю функцию показа документа на новой закладке (странице?) браузера.

public static void ShowDocScan(int ImageId)
{
// http://localhost:60121/MyWebService.asmx/GetScanAsFile?ScanId=10
string AbsUri = App.Current.Host.Source.AbsoluteUri;
string AbsPath = App.Current.Host.Source.AbsolutePath;
string AppHostUri = AbsUri.Substring(0,AbsUri.IndexOf(AbsPath));
string scanurl = Publics.AppHostUri + "/MyWebService.asmx/GetScanAsFile?ScanId=" + Convert.ToString(ImageId);

Uri scanaddr = new Uri(scanurl, UriKind.Absolute);
System.Windows.Browser.HtmlPage.Window.Navigate(scanaddr, "_blank");
}


PS. а codeplex там что-то сильно хитрое замутил, я тогда столько букв просто не осилил...
...
Рейтинг: 0 / 0
SL4, RIA - как показать пользователю PDF из БД?
    #37780280
Фотография Шайтан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
реализация передачи файлов (любых) с помощью WCF по http - http://www.gotdotnet.ru/blogs/sergun/6702/
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / SL4, RIA - как показать пользователю PDF из БД?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]