Веб сервис доступом к БД и клиент
От: xSplashx  
Дата: 07.04.10 16:05
Оценка:
Доброго времени суток.Передо мной возникла такая задача: написать веб сервис имеющий доступ к БД, в которой храниться информация о человеке(имя,данные,фотка) и клиентское веб приложение к этому веб сервису.Начал с того ,что заполнил базу данных.Написал вебметоды которые по индексу возвращают имя,данные,фотку,причём последнее представленное в виде массива байтов.Написал клиент и через него обращаюсь к этим методам.Имя и данные изымаются без проблем,а вот фотка не хочет.Вот метод который изымает фотку:
 [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. Это задание лабораторная работа в институт.
Re: Веб сервис доступом к БД и клиент
От: GlebZ Россия  
Дата: 07.04.10 17:08
Оценка:
Здравствуйте, xSplashx, Вы писали:

P.S. Это задание лабораторная работа в институт.
Смотрим как сохранить Image в MemoryStream
Re[2]: Веб сервис доступом к БД и клиент
От: xSplashx  
Дата: 07.04.10 17:53
Оценка:
Здравствуйте, 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: Данный поток не поддерживает таймауты.
Re[3]: Веб сервис доступом к БД и клиент
От: HowardLovekraft  
Дата: 08.04.10 06:15
Оценка:
Какой тип данных у table.Foto?
Re[4]: Веб сервис доступом к БД и клиент
От: xSplashx  
Дата: 08.04.10 06:50
Оценка:
Здравствуйте, 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();
Re[5]: Веб сервис доступом к БД и клиент
От: HowardLovekraft  
Дата: 08.04.10 07:18
Оценка:
Здравствуйте, xSplashx, Вы писали:

S>В таблице написало image.Но храниться фотка в двоичных binary

Я подразумевал CLR-тип. Из контекста понял, что byte[].
Тогда непонятно, о каком несоответствии типов речь? Приведите полный текст ошибки.

З.Ы. А в институте не разрешают использовать WCF Data Services для целей лабораторных работ?
Re[6]: Веб сервис доступом к БД и клиент
От: xSplashx  
Дата: 08.04.10 08:07
Оценка:
Здравствуйте, HowardLovekraft, Вы писали:


HL>Я подразумевал CLR-тип. Из контекста понял, что byte[].

HL>Тогда непонятно, о каком несоответствии типов речь? Приведите полный текст ошибки.

HL>З.Ы. А в институте не разрешают использовать WCF Data Services для целей лабораторных работ?


В клиенте пишу:
 byte[] r;
r = webservice.getImage(index);

Компилятор выводит ошибку:Неявное преобразование типа "лаба_14клиент.ServiceReference1.Image" в "byte[]" невозможно (явно пробывал тож не помогает)
если сделать так:



ServiceReference1.Image Foto;
Foto=webservice.getImage(index);

всё запускается,но при выходе из функции в браузере выскакивает ошибка:
Сведения об исключении: System.InvalidOperationException: Указанный тип является абстрактным: имя="Image", пространство имен="http://tempuri.org/", в <getImageResult xmlns='http://tempuri.org/'&gt;.
Пытался понять вообще что за тип:
ServiceReference1.Image Foto;

и почему он абстрактный как он возник я не создавал его),почему такое ума не приложу.
З.Ы. У нас в инсте не обьяснют ничего,есть лекции семинары,толку ноль,раньше ходил сейчас не хожу.То что сейчас проходят я уже сдал а до этого врядли дойдут).Вот линк с описанием лабы если интересно):http://csharp.pbworks.com/LabnikCs15
Re[7]: Веб сервис доступом к БД и клиент
От: HowardLovekraft  
Дата: 08.04.10 10:30
Оценка:
Здравствуйте, xSplashx, Вы писали:

S>Неявное преобразование типа "лаба_14клиент.ServiceReference1.Image" в "byte[]" невозможно

Как на клиенте определен webservice.getImage, что он возвращает?
Если это не byte[], то как вам удалось это сделать, при условии, что на сервисе определение метода getImage все-такие возвращает byte[]?

Определение типа ServiceReference1.Image можете привести?
Re[8]: Веб сервис доступом к БД и клиент
От: xSplashx  
Дата: 08.04.10 10:59
Оценка:
Здравствуйте, HowardLovekraft, Вы писали:

HL>Как на клиенте определен webservice.getImage, что он возвращает?

HL>Если это не byte[], то как вам удалось это сделать, при условии, что на сервисе определение метода getImage все-такие возвращает byte[]?

HL>Определение типа ServiceReference1.Image можете привести?

На клиенте определяется это метод как:
лаба_14клиент.ServiceReference1.Image getImage(int id);
не понимаю почему не byte[]. В диаграмме класов какой-то абстрактный класс(смутно представляю что это)
ServiceReference1.Image не понимаю откуда он) может удалить его или там везде поменять в методе чтоб byte[] возвращало)?
Устал уже идей нет,а завтра сдать хочу)
Re[9]: Веб сервис доступом к БД и клиент
От: xSplashx  
Дата: 08.04.10 11:29
Оценка:
Сделал как написал) удалось,из этого понял что если появляется что-то что не создавал лучше удалить)).Только теперь проблема другая
из байтов получил
System.Drawing.Image Fotka;
System.Drawing.ImageConverter k = new System.Drawing.ImageConverter();
Fotka = (System.Drawing.Image)k.ConvertFrom(r);

а на сайт фотка заливается вида:

System.Web.UI.WebControls.Image foto; 
System.Drawing.ImageFormatConverter

форматконвертер не помог,теперь голову ломаю как нужный вид предать фотке).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.