Доброго времени суток.Передо мной возникла такая задача: написать веб сервис имеющий доступ к БД, в которой храниться информация о человеке(имя,данные,фотка) и клиентское веб приложение к этому веб сервису.Начал с того ,что заполнил базу данных.Написал вебметоды которые по индексу возвращают имя,данные,фотку,причём последнее представленное в виде массива байтов.Написал клиент и через него обращаюсь к этим методам.Имя и данные изымаются без проблем,а вот фотка не хочет.Вот метод который изымает фотку:
[WebMethod]
public byte[] getImage(int id)
{
using (Database1Entities baza = new Database1Entities())
{
Forbs table = baza.Forbs.Where(c => c.id == id).FirstOrDefault();
buf = table.Foto;
return buf;
}
}
в клиенте пишу такую строчку:
byte[] r=webservice.getImage(index);
но работать отказывается так как идёт не соответствие типов.А именно Студия говорит что тип возвращаемого значения этого метода:
ServiceReference1.Image
.Объявляю переменную этого типа работа завершается ошибкой на этой строчке.Неявное преобразование типов тут не работает.Прошу помочь в этом разобраться.P.S. Это задание лабораторная работа в институт.
Здравствуйте, GlebZ, Вы писали: GZ>Смотрим как сохранить Image в MemoryStream
попытался сделать таким образом:
[WebMethod]
public System.IO.MemoryStream getImage(int id)
{
using (Database1Entities baza = new Database1Entities())
{
System.IO.MemoryStream mem = new System.IO.MemoryStream();
Forbs table = baza.Forbs.Where(c => c.id == id).FirstOrDefault();
buf = table.Foto;
mem.Write(buf, 0, buf.Length);
return mem;
}
}
Пишет ошибку:System.InvalidOperationException: Ошибка при создании документа XML. ---> System.InvalidOperationException: Данный поток не поддерживает таймауты.
Здравствуйте, HowardLovekraft, Вы писали:
HL>Какой тип данных у table.Foto?
В таблице написало image.Но храниться фотка в двоичных binary. Вот так вот засовывал в БД:
using (Database1Entities baza = new Database1Entities())
{
Forbs table = baza.Forbs.Where(c => c.id == 1).FirstOrDefault();
System.Drawing.Image img = new Bitmap("D:\\данные форбс\\Carlos_Slim_moustache.jpg");
ImageConverter k = new ImageConverter();
byte[] mass = (byte[])k.ConvertTo(img, typeof(byte[]));
table.Foto = mass;
baza.SaveChanges();
Здравствуйте, xSplashx, Вы писали:
S>В таблице написало image.Но храниться фотка в двоичных binary
Я подразумевал CLR-тип. Из контекста понял, что byte[].
Тогда непонятно, о каком несоответствии типов речь? Приведите полный текст ошибки.
З.Ы. А в институте не разрешают использовать WCF Data Services для целей лабораторных работ?
HL>Я подразумевал CLR-тип. Из контекста понял, что byte[]. HL>Тогда непонятно, о каком несоответствии типов речь? Приведите полный текст ошибки.
HL>З.Ы. А в институте не разрешают использовать WCF Data Services для целей лабораторных работ?
В клиенте пишу:
byte[] r;
r = webservice.getImage(index);
Компилятор выводит ошибку:Неявное преобразование типа "лаба_14клиент.ServiceReference1.Image" в "byte[]" невозможно (явно пробывал тож не помогает)
если сделать так:
всё запускается,но при выходе из функции в браузере выскакивает ошибка:
Сведения об исключении: System.InvalidOperationException: Указанный тип является абстрактным: имя="Image", пространство имен="http://tempuri.org/", в <getImageResult xmlns='http://tempuri.org/'>.
Пытался понять вообще что за тип:
ServiceReference1.Image Foto;
и почему он абстрактный как он возник я не создавал его),почему такое ума не приложу.
З.Ы. У нас в инсте не обьяснют ничего,есть лекции семинары,толку ноль,раньше ходил сейчас не хожу.То что сейчас проходят я уже сдал а до этого врядли дойдут).Вот линк с описанием лабы если интересно):http://csharp.pbworks.com/LabnikCs15
Здравствуйте, xSplashx, Вы писали:
S>Неявное преобразование типа "лаба_14клиент.ServiceReference1.Image" в "byte[]" невозможно
Как на клиенте определен webservice.getImage, что он возвращает?
Если это не byte[], то как вам удалось это сделать, при условии, что на сервисе определение метода getImage все-такие возвращает byte[]?
Определение типа ServiceReference1.Image можете привести?
Здравствуйте, HowardLovekraft, Вы писали:
HL>Как на клиенте определен webservice.getImage, что он возвращает? HL>Если это не byte[], то как вам удалось это сделать, при условии, что на сервисе определение метода getImage все-такие возвращает byte[]?
HL>Определение типа ServiceReference1.Image можете привести?
На клиенте определяется это метод как:
лаба_14клиент.ServiceReference1.Image getImage(int id);
не понимаю почему не byte[]. В диаграмме класов какой-то абстрактный класс(смутно представляю что это)
ServiceReference1.Image не понимаю откуда он) может удалить его или там везде поменять в методе чтоб byte[] возвращало)?
Устал уже идей нет,а завтра сдать хочу)