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服务器中出现System.Net.Web异常

显然,WCF服务器将所有数据存储在内存中,因此最终会耗尽可用内存。这会导致在服务器中引发OOM异常,从而可能导致进程终止。这会终止TCP连接。

重新设计服务器,使其不需要无限量的内存。