powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF XML сериализация
5 сообщений из 5, страница 1 из 1
WCF XML сериализация
    #37024615
Gregor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. помогите пожалуйста разобраться.
Пытаюсь создать WCF службу. Поскольку предполагается что набор данных будет большой решил передавать потоком. Ее описание следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
   [ServiceContract]
    public interface IDataItems
    {
        [OperationContract]
        Stream GetStreamedClients();
    }
 
    [DataContract(Name = "Client", Namespace = "")]  
    public class Client
    {
        string _Id = "";
        string _Name = "";
        string _Code = "";
 
        public Client()
        {
        }
 
        [DataMember]
        public string Id 
        { 
            get {return this._Id;}
            set {this._Id = value;}
        }
 
        [DataMember]
        public string Name 
        { 
            get {return this._Name;}
            set {this._Name = value;}
        }
 
        [DataMember]
        public string Code
        { 
            get {return this._Code;}
            set { this._Code = value; } 
        }
    }
 
    [CollectionDataContract(Name = "Clients", Namespace = "")]
    public class Clients : List<Client>
    {
    }
 
Со стороны сервера сериализую данные след. образом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
            Clients list = GetClientsData;
            MemoryStream _stream = new MemoryStream();
 
            XmlTextWriter xw2 = new XmlTextWriter("D://XmlSerializeResult.xml", Encoding.UTF8);
            xw2.Formatting = Formatting.Indented;
            XmlDictionaryWriter writer2 = XmlDictionaryWriter.CreateDictionaryWriter(xw2);
            DataContractSerializer ser2 = new DataContractSerializer(typeof(Clients));
            ser2.WriteObject(writer2, list);
            writer2.Close();
            xw2.Close();            
            
            
            XmlTextWriter xw = new XmlTextWriter(_stream, Encoding.UTF8);
            xw.Formatting = Formatting.Indented;
            XmlDictionaryWriter writer = XmlDictionaryWriter.CreateDictionaryWriter(xw);
            DataContractSerializer ser = new DataContractSerializer(typeof(Clients));
            ser.WriteObject(writer, list);
                        
            
            return _stream;
 
Для контроля результат пишу в XML файл.

На клиенте десериализую следующим образом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
            DataItemsClient di = new DataItemsClient();
 
            Stream _stream = di.GetStreamedClients();
            
	    XmlReader dreader = XmlReader.Create(_stream);
            Clients cls = null;
            DataContractSerializer ser = new DataContractSerializer(typeof(Clients));
            cls = (Clients)ser.ReadObject(dreader);


Однако на строке «cls = (Clients)ser.ReadObject(dreader)» летит ошибка «There was an error deserializing the object of type DataItemsForm.ServiceReference1.Clients. Root element is missing.».

Как я понял в результате поисков по данной ошибке необходимо делать следующее

Код: plaintext
1.
2.
            _stream.Seek(0, SeekOrigin.Begin);
            _stream.Position = 0;
 
Однако не могу понять как это сделать ведь у меня _stream является экземпляром абстрактного класса Stream и при попытке его явного приведения к классу MemoryStream летит ошибка «Unable to cast object of type 'MessageBodyStream' to type 'System.IO.MemoryStream'.».
Подскажите как быть? Как десериализовать мои данные? Что самое интересно если я пытаюсь десериализовать сам файл который сохраняю для контроля то десериализация проходит успешно.
...
Рейтинг: 0 / 0
WCF XML сериализация
    #37024632
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот пример стриминга я давно когда-то делал.

У вас тут всё не верно.
...
Рейтинг: 0 / 0
WCF XML сериализация
    #37024816
Gregor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buredВот пример стриминга я давно когда-то делал.

У вас тут всё не верно.

А где именно неверно? можно поточнее?
...
Рейтинг: 0 / 0
WCF XML сериализация
    #37024853
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gregorпредполагается что набор данных будет большой
Позвольте поинтересоваться - сколько вешать? (с)

P.S. Лучше стараться избегать по возможности стриминг. Либо, выделить отдельный потоковый сервис.
...
Рейтинг: 0 / 0
WCF XML сериализация
    #37024915
Gregor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУGregorпредполагается что набор данных будет большой
Позвольте поинтересоваться - сколько вешать? (с)

P.S. Лучше стараться избегать по возможности стриминг. Либо, выделить отдельный потоковый сервис.

Спасибо, почитаю про потоковые сервисы.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF XML сериализация
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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