Первоначально:
Сценарий:
Код:
[DataContract(IsReference=true)]
public class Message
{
[DataMember]
public string TopicName { get; set; }
[DataMember]
public string EventData { get; set; }
[DataMember]
public SerializableDictionary<string, FuturesLineAsset> FuturesLineDictionary { get; set ; }
}
Мысли:
Родитель:
public class FuturesAsset
{
public string AssetName { get; set; }
public BindableDictionary<string, FuturesLineAsset> AssetLines { get; private set; }
public FuturesAsset()
{
AssetLines = new BindableDictionary<string, FuturesLineAsset>();
}
public FuturesAsset(string assetName)
{
AssetLines = new BindableDictionary<string, FuturesLineAsset>();
AssetName = assetName;
}
}
Ребенок:
public class FuturesLineAsset
{
public string ReferenceAsset { get; set; }
public string MID { get; set; }
public double LivePrice { get; set; }
public DateTime UpdateTime { get; set; }
public DateTime LastContributedTime { get; set; }
public double Spread { get; set; }
public double Correlation { get; set; }
public DateTime Maturity { get; set; }
public double ReferenceCurve { get; set; }
public FuturesLineAsset(string mID, string referenceAsset, double livePrice)
{
MID = mID;
ReferenceAsset = referenceAsset;
ReutersLivePrice = livePrice;
}
}
это исключение не связано с Циркулярной ссылкой, это просто тайм-аут, когда вы пытаетесь перекачать тонны данных по сети.
Значения по умолчанию, которые поставляются с WCF, очень-очень низкие (я полагаю, они были изменены в WCF 4). Прочтите эти два сообщения в блоге, они должны дать вам представление о том, как уменьшить регулирование вашей службы:
Создание высокопроизводительных служб WCF
Как ограничивать работу службы Wcf, предотвращать атаки DoS и поддерживать масштабируемость Wcf
Обновление : кроме того, в конфигурации WCF есть несколько разных тайм-аутов, и в зависимости от того, о каком клиенте или сервере вы говорите, вам нужно обновить другое предложение тайм-аута ... прочтите это о том, что каждый из них означает, и вы сможете выяснить, какой из них вам нужно увеличить. Или , вы можете просто установить каждый тайм-аут на int.max, если вам все равно, может ли вызов занять много времени для завершения.