WCF. Запрос не доходит до сервиса
От: Аноним  
Дата: 29.04.10 20:27
Оценка:
Привет всем,
У меня есть подобная иерархия классов:
Здесь два класса наследуются от одного предка (A). Причем один из наследников (C) содрежит массив элеметов A.
Другой интересный момент, класс B имеет свойство типа Object, который должен содержать простые типы, на всякий случай я их в KnownTypes добавил.

[DataContract]
[KnownType("KnownTypes")]
public class A {
    [DataMember]
    public String Prop1 { get; set; } 
    
    static Type[] KnownTypes() {
            return new Type[] { 
                typeof(B), 
                typeof(C)
            };
        }
}


[DataContract]
[KnownType("KnownTypes")]
public class B : A
{
    [DataMember]
    public Object Prop2 { get; set; }
    
    static Type[] KnownTypes() {
            return new Type[] { 
                typeof(String), 
                typeof(Int32), 
                typeof(Decimal),
                typeof(Boolean), 
                typeof(DateTime),
                typeof(Guid)
            };
        }
}

[DataContract]
public class C : A
{
    [DataMember]
    public A[] Children { get; set; }
}


Сервис имеет подобный метод:
public void MyMethod(A a)
{
    // ...
}

На стороне клиента сгенерированны проки классы. Создаются эксемпляры или B или С класса и вызывается метод сервиса MyMethod( b /* или с */).
Вызов до сервиса не доходит, и операция через некоторое время обрывается по таймауту.

Вопрос собственно, почему не доходит запрос? Или это иерархия классов, или нельзя использовать тип объект в классе B?
Надо сказать, что если я использую свойство типа объект в простом классе (без наследования), то запросы с этип типом доходят до сервиса, и он их успешно десериализирует.
Re: WCF. Запрос не доходит до сервиса
От: Аноним  
Дата: 30.04.10 03:29
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вызов до сервиса не доходит, и операция через некоторое время обрывается по таймауту.

А>Вопрос собственно, почему не доходит запрос?
включите диагностику на клиенте и на сервере и всё увидете
Re: WCF. Запрос не доходит до сервиса
От: AUDev  
Дата: 30.04.10 05:18
Оценка: 6 (1)
Здравствуйте, Аноним, Вы писали:

А>Вопрос собственно, почему не доходит запрос?


На сервере (и клиенте) в конфиг добавьте:

 <system.serviceModel>
    <diagnostics>
      <messageLogging maxMessagesToLog="30000" logEntireMessage="true" logMessagesAtServiceLevel="true" logMalformedMessages="true" logMessagesAtTransportLevel="true">
      </messageLogging>
    </diagnostics>
  </system.serviceModel>
  <system.diagnostics>
    <sources>
      <source name="System.ServiceModel" switchValue="Verbose">
        <listeners>
          <add name="xml" />
        </listeners>
      </source>
      <source name="System.ServiceModel.MessageLogging" switchValue="Verbose">
        <listeners>
          <add name="xml" />
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="trace.xml" />
    </sharedListeners>
    <trace autoflush="true" />
  </system.diagnostics>


Полученный trace.xml открывайте \Program Files\Microsoft SDKs\Windows\v6.0A\bin\SvcTraceViewer.exe и смотрите причину.
Re[2]: WCF. Запрос не доходит до сервиса
От: Аноним  
Дата: 30.04.10 08:31
Оценка:
Спасибо за указание способа трасировки сообщений. То что нужно в хозяйстве.

Обнаружилась причина (вольный перевод):

Ошибка десериализации параметра ..имя_параметра.. Внутреняя ошибка "граф объектов для типа "С" содержит циклы и не может быть сериализован, если отслеживание ссылок отключено.". Для получения дополнительной информации см. раздел "InnerException".


Вот собственно вопрос, как включить отслеживание ссылок?
Re[3]: WCF. Запрос не доходит до сервиса
От: Аноним  
Дата: 30.04.10 08:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Обнаружилась причина (вольный перевод):

а можно всё-таки без переводов?
Re[4]: WCF. Запрос не доходит до сервиса
От: Аноним  
Дата: 30.04.10 08:48
Оценка: :))
А>а можно всё-таки без переводов?
Вот:

Fehler beim Deserialisieren von Parameter ..имя_параметра_в_методе.. Die InnerException-Nachricht war "Der Objektgraph für den Typ "С" enthält Zyklen und kann nicht serialisiert werden, wenn die Nachverfolgung von Verweisen deaktiviert ist.". Weitere Details finden Sie unter "InnerException".
Re[5]: WCF. Запрос не доходит до сервиса
От: AUDev  
Дата: 30.04.10 09:19
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>а можно всё-таки без переводов?

А>Вот:
А>
А>Fehler beim Deserialisieren von Parameter ..имя_параметра_в_методе.. Die InnerException-Nachricht war "Der Objektgraph für den Typ "С" enthält Zyklen und kann nicht serialisiert werden, wenn die Nachverfolgung von Verweisen deaktiviert ist.". Weitere Details finden Sie unter "InnerException".
А>


[DataContract(IsReference = true)]
Re[6]: WCF. Запрос не доходит до сервиса
От: Аноним  
Дата: 30.04.10 09:38
Оценка:
AUD>[DataContract(IsReference = true)]

Оно самое
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.