pet*_*ter 130 .net c# sockets networking
我正在使用一个商业应用程序,它正在抛出带有消息的SocketException,
远程主机强制关闭现有连接
客户端和服务器之间的套接字连接会发生这种情况 连接仍然存在,并且正在传输大量数据,但它随后就无法断开连接.
有没有人见过这个?原因是什么?我可以猜到一些原因,但是有没有办法在这段代码中添加更多内容以找出原因可能是什么?
欢迎任何意见/想法.
... 最新的 ...
我有一些.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
Run Code Online (Sandbox Code Playgroud)
根据日志记录的其他部分,我看到它说'0#0'表示正在发送一个0字节长度的数据包.但这究竟意味着什么?
发生两种可能性之一,我不确定,
1)连接正在关闭,但数据随后被写入套接字,从而产生上述异常.0#0只表示没有发送任何内容,因为套接字已经关闭.
2)连接仍然是打开的,并且正在发送一个零字节的数据包(即代码有一个错误),0#0表示正在尝试发送一个零字节的数据包.
你怎么看?我想这可能是不确定的,但也许其他人已经看到过这种事情了?
Rar*_*arr 86
这通常意味着远程端关闭连接(通常通过发送TCP/IP RST数据包).如果您正在使用第三方应用程序,可能的原因是:
第一种情况可能就是发生了什么.
您可以启动Wireshark以准确查看电线上发生的情况以缩小问题范围.
没有更具体的信息,这里的任何人都不可能真正帮助你.
wil*_*maz 61
使用TLS 1.2解决了这个错误.
你可以使用TLS 1.2强制你的应用程序(确保在调用你的服务之前执行它):
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
Run Code Online (Sandbox Code Playgroud)
另一种解决方案:
在本地计算机或服务器中启用强加密以使用TLS1.2,因为默认情况下它被禁用,因此仅使用TLS1.0.
要启用强加密,请使用管理员权限在PowerShell中执行以下命令:
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\.NetFramework\v4.0.30319' -Name 'SchUseStrongCrypto' -Value '1' -Type DWord
Run Code Online (Sandbox Code Playgroud)
您需要重新启动计算机才能使这些更改生效.
cag*_*tay 28
这不是代码中的错误.它来自.Net的Socket实现.如果您使用EndReceive的重载实现,如下所示,您将不会得到此异常.
SocketError errorCode;
int nBytesRec = socket.EndReceive(ar, out errorCode);
if (errorCode != SocketError.Success)
{
nBytesRec = 0;
}
Run Code Online (Sandbox Code Playgroud)
ayh*_*ber 10
解决这个常见烦人问题的简单方法:
只需转到" .context.cs"文件(位于 "*.edmx"文件下的" .context.tt"下).
然后,将此行添加到构造函数中:
public DBEntities()
: base("name=DBEntities")
{
this.Configuration.ProxyCreationEnabled = false; // ADD THIS LINE !
}
Run Code Online (Sandbox Code Playgroud)
希望这是有帮助的.
有同样的错误.实际上工作的情况是使用一些代理(在我的情况下是小提琴手)发送流量.更新了从4.5.2到> = 4.6的.NET框架,现在一切正常.实际的要求是:
new WebClient().DownloadData("URL");
例外是:
SocketException:远程主机强制关闭现有连接
由于 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; }
}
Run Code Online (Sandbox Code Playgroud)
我将 [IgnoreDataMemberAttribute] 添加到 Parent 属性。这解决了问题。
| 归档时间: |
|
| 查看次数: |
362868 次 |
| 最近记录: |