最初:
- 我以为这是一个循环引用问题........结果不是。
- 问题是因为根本没有配置服务配置。
- 由于默认值非常低,发送大量数据会使服务崩溃。
场景:
- 我的 WCF 服务中似乎有循环引用,但使用“[DataContract(IsReference=true)]”对修复它没有任何帮助。
- 我收到错误消息“套接字连接已中止。这可能是由于处理您的消息时出错或远程主机超过接收超时或底层网络资源问题引起的。本地套接字超时为 '00:01 :00'。”
- 我错过了什么吗?
代码:
[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 ; }
}
想法:
- 我想知道是不是因为我有一个 FuturesAsset 类,它有一个 BindableDictionary 类型的属性(这是一个自定义对象),并且该属性包含一个 FuturesLinesAssets 列表。
- 见下文:
父级:
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;
}
}
child :
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;
}
}
最佳答案
此错误可能由多种原因引起。虽然在这种情况下这是一个时间问题,但它通常与时间无关,尤其是在立即收到错误的情况下。可能的原因是:
- 在您的契约(Contract)中用作参数或返回类型的对象没有无参数构造函数,也没有用 DataContract 属性修饰。检查用作参数或返回类型的类,以及这些类的公共(public)属性使用的所有类型。如果您为其中一个类实现带参数的构造函数,编译器将不再为您添加默认的无参数构造函数,因此您需要自己添加。
- 服务配置中定义的默认限制太低(MaxItemsInObjectGraph、MaxReceivedMessageSize、MaxBufferPoolSize、MaxBufferSize、MaxArrayLength)。
- DataContract 对象的某些公共(public)属性是只读的。确保所有公共(public)属性都有 getter 和 setter。
关于c# - 套接字连接已中止 - CommunicationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3441844/