Коллеги, сделал пример работы с потоками через oData с
использованием WCF-клиента. Привожу код функции консольного приложения,
которое пишет файл из базы потоком в файл на диске и, соответственно,
файл на диске пишет в базу. Сначала, естественно, сгенерированы классы клиента
как это описано в SDK.
Пример только для показа технологии, не несет подробностей и особого смысла, поэтому
не судите строго.
Тот же принцип можно использовать и при передаче фотографий, только таблицы и поля будут другими.[csharp]
static void 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";
// Получаем поток с двоичными данными из поля Data
using (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();
}
}
[/csharp]