现有的连接被远程主机强制closures

我正在与一个商业应用程序抛出一个SocketException与消息,

现有的连接被远程主机强制closures

这发生在客户端和服务器之间的套接字连接。 这个连接还活着,而且数据正在被传输,但是却不知从何处断开。

有没有人看过这个? 原因是什么? 我可以猜出一些原因,但是还有什么办法可以添加更多的代码来找出原因可能是什么?

任何意见/想法都欢迎。

… 最新的 …

我有一些logging从一些.NET跟踪,

System.Net.Sockets Verbose: 0 : [8188] Socket#30180123::Send() DateTime=2010-04-07T20:49:48.6317500Z System.Net.Sockets Error: 0 : [8188] Exception in the Socket#30180123::Send - An existing connection was forcibly closed by the remote host DateTime=2010-04-07T20:49:48.6317500Z System.Net.Sockets Verbose: 0 : [8188] Exiting Socket#30180123::Send() -> 0#0 

根据日志logging的其他部分,我已经看到它说“0#0”意味着正在发送一个0字节长度的数据包。 但是这到底意味着什么呢?

发生两种可能性之一,我不知道哪一个,

1)连接正在closures,但数据正在写入套接字,从而创build上述exception。 0#0只是意味着什么都没有发送,因为套接字已经closures。

2)连接仍然打开,一个零字节的数据包正在发送(即代码有一个错误),0#0意味着一个零字节的数据包正试图发送。

你怎么看? 我想这可能是不确定的,但也许有人看过这种东西?

这通常意味着远程端closures了连接(通常通过发送TCP / IP RST数据包)。 如果您正在使用第三方应用程序,可能的原因是:

  • 您正在向应用程序发送格式错误的数据
  • 客户端和服务器之间的networking连接由于某种原因正在closures
  • 您在第三方应用程序中触发了一个导致其崩溃的错误
  • 第三方应用程序已经耗尽系统资源

第一种情况很可能是发生了什么事情。

您可以启动Wireshark来查看线路上正在发生的事情,以缩小问题的范围。

没有更多的具体信息,这里的任何人都不可能真正帮助你。

这不是你的代码中的错误。 它来自.NET的Socket实现。 如果你使用EndReceive的重载实现,你将不会得到这个exception。

  SocketError errorCode; int nBytesRec = socket.EndReceive(ar, out errorCode); if (errorCode != SocketError.Success) { nBytesRec = 0; } 

简单的解决这个常见的恼人的问题:

只需转到“ .context.cs”文件(位于 “* .edmx”文件下的“ .context.tt”文件中)。

然后,将这一行添加到您的构造函数中:

 public DBEntities() : base("name=DBEntities") { this.Configuration.ProxyCreationEnabled = false; // ADD THIS LINE ! } 

希望这是有帮助的。

有相同的错误。 实际上,如果stream量是使用一些代理(我的情况是提琴手)发送的。 更新.NET框架从4.5.2到> = 4.6,现在一切工作正常。 实际要求是:
new WebClient().DownloadData("URL");
例外是:

SocketException:现有连接被远程主机强制closures

我有这个例外,因为entity.In实体中的循环引用

 public class Catalog { public int Id { get; set; } public int ParentId { get; set; } public Catalog Parent { get; set; } public ICollection<Catalog> ChildCatalogs { get; set; } } 

我将[IgnoreDataMemberAttribute]添加到Parent属性。 这解决了这个问题。

也许,你应该closures其他连接。 在远程演示asp.net中创build新数据库时出现同样的错误,并在Visual Studio中的Server Explorer中出现。

当我试图从数据库中读取一个枚举列中有一个null的行时,我得到了这个exception,它不能将null映射到一个枚举值。

我遇到了这个exception,当类的DateTime属性没有得到的价值。我只是使它可以为空的DateTime和find解决scheme。

 public class PlanningBoardBO { ... Other Properties ... public DateTime? PickupDate { get; set; } ... Here changed DateTime to DateTime? }