Коллеги, сделал пример работы с потоками через oData с
использованием WCF-клиента. Привожу код функции консольного приложения,
которое пишет файл из базы потоком в файл на диске и, соответственно,
файл на диске пишет в базу. Сначала, естественно, сгенерированы классы клиента
как это описано в SDK.
Пример только для показа технологии, не несет подробностей и особого смысла, поэтому
не судите строго.
Тот же принцип можно использовать и при передаче фотографий, только таблицы и поля будут другими.
staticvoid Main(string[] args){// URI сервиса oData.
Uri svcUri =new Uri("http://localhost/0/ServiceModel/EntityDataService.svc/");// Создаем контекст приложения BPMonline.
BPMonline context =new BPMonline(svcUri);// Указываем имя и пароль пользователя BPMonline.
context.Credentials=new NetworkCredential("Login", "Password");//=============== Чтение потоковых данных из базы в файл// Читаем первую запись из коллекции файлов
BpmonlineService.File file =(from f in context.FileCollection
select f).First();// Тип передаваемого контента
DataServiceRequestArgs _args =new DataServiceRequestArgs();
_args.ContentType="application/octet-stream";// Получаем поток с двоичными данными из поля Datausing(Stream rs = context.GetReadStream(file, "Data", _args).Stream){// Создаем файл в текущем каталогеusing(Stream fs =new FileStream(file.Name, FileMode.Create)){// Пишем поток в файл
rs.CopyTo(fs);}}//=============== Запись файла в базу данных// Открываем файл, который будем записыватьusing(FileStream fs =new FileStream("Data.xls", FileMode.Open)){// Создаем новый файл и инициализируем свойства.
BpmonlineService.File NewFile =new BpmonlineService.File(){
Id = Guid.NewGuid(),
Name = fs.Name};// Добавляем созданный файл в коллекцию файлов контекста сервиса.
context.AddToFileCollection(NewFile);// Сохраняем изменения данных в BPMonline
context.SaveChanges();// Пишем поток в поле Data
context.SetSaveStream(NewFile, "Data", fs, true, _args);// Сохраняем изменения данных в BPMonline
context.SaveChanges();}}