WCF服务器中出现System.Net.Web异常
本文关键字:Net Web 异常 System 服务器 WCF | 更新日期: 2023-09-27 18:26:43
我在尝试将文件夹的所有文件发送到服务器,然后从C#控制台客户端获得处理后的输出时,引发了以下异常。。
以下是例外,
System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a
receive. ---> System.IO.IOException: Unable to read data from the transport
connection: An existing connection was forcibly closed by the remote host. --->
System.Net.Sockets.SоcketException: An existing connection was forcibly closed by the remote host
аt System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
如果我处理同一个文件作为单独的文件,它是如何工作的。
以下是所使用的绑定参数,
在服务器的web.config中:
<binding name="ExtendedMaxSize"
openTimeout="10:01:00"
receiveTimeout="10:10:00"
sendTimeout="10:01:00"
maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647"
messageEncoding="Text"
textEncoding="utf-8">
<readerQuotas maxDepth="64"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="8192"
maxNameTableCharCount="16384"/>
<security mode="None">
<transport clientCredentialType="None"/>
</security>
在客户端的应用程序配置中:
<binding name="WSHttpBinding_InterfaceWCFServer1"
openTimeout="10:01:00"
receiveTimeout="10:10:00"
sendTimeout="10:01:00"
bypassProxyOnLocal="false"
transactionFlow="false"
hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647"
messageEncoding="Text"
textEncoding="utf-8"
useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="64"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="8192"
maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None"
proxyCredentialType="None"
realm="">
<extendedProtectionPolicy policyEnforcement="Never" />
</transport>
<message clientCredentialType="Windows"
negotiateServiceCredential="true"
algorithmSuite="Default"
establishSecurityContext="true" />
</security>
</binding>
我在笔记本电脑中使用了8GB RAM,服务器和客户端都在同一台机器中。
在任务管理器中看到Processes
时,我发现w3wp.exe的使用量从700 MB到6 GB不等。当使用量达到95%的限制时,我会抛出此异常,w3wp.exe
使用的内存会减少到700 MB左右,然后每次请求都会增加,直到达到95%左右的内存。所以在这一点上,我抛出了这个异常。
显然,WCF服务器将所有数据存储在内存中,因此最终会耗尽可用内存。这会导致在服务器中引发OOM异常,从而可能导致进程终止。这会终止TCP连接。
重新设计服务器,使其不需要无限量的内存。