Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> wcf серилизация 
:(
    Опции темы
GRemlin87
Дата 23.1.2012, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 12.2.2011

Репутация: нет
Всего: нет



Столкнулся вот с такой вот трудностью.Создаю wcf службу:
Код

 [ServiceContract]
    public interface IService1
    {
        [OperationContract]   
        CompositeType GetDataUsingDataContract();

     }
public class Service1 : IService1
    {
    
        public CompositeType GetDataUsingDataContract()
        {
            var type=new CompositeType();
            type.status = new Status(type);
            return type;
        }
    }

[DataContract]
    public class Status
    { 
       [DataMember]
       private CompositeType composite;
       
       public Status(CompositeType comp)
       {
           composite = comp;
       }       
    }
    [DataContract]
    public class CompositeType
    {
        [DataMember]
        public Status status { get; set;}

    }

Дак вот, при вызове метода GetDataUsingContract() служба падает с сообщением
Не удалось вызвать службу. Возможные причины: служба отключена или недоступна; конфигурация клиента не совпадает с прокси; введен недопустимый существующий прокси. Для получения дополнительных сведений см. трассировку стека. Можно выполнить восстановление, запустив новый прокси, восстановив конфигурацию по умолчанию или обновив службу.

которое собственно мне совсем не помогло, единственную проблему которую я тут увидел это циклическая ссылка. Судя по англоязычным блогам и мануалам, проблема решается добавлением к DataContract  IsReference=true, но после этого служба стала падать с сообщение StackOverflow exception. Может есть у кого мысли как с подобным бороться?
PM MAIL   Вверх
mihryak
Дата 26.1.2012, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 3
Всего: 36



Избавляться от циклических ссылок - служба сериализует CompositeType, видит, что там есть DataMember Status, сериализует его, видит, что там есть свойство CompositeType, сериализует его, ...... Вот тебе и StackOverflow.

Можно, конечно, в классе Status убрать атрибут DataMember у свойства CompositeType, но устроит ли тебя, что в десериализованном варианте оно будет пустым?
По-хорошему, должно устраивать, ведь ситуация, когда это не так, говорит о плохом дизайне - лучше определись чётко, какой из этих классов действительно должен хранить инстанс другого, и оставь такое место единственным.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0726 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.