2014-10-15 5 views
0

Я получаю следующее исключение брошенного при попытке отправить все файлы в папке на сервер, а затем получить Обработанные выводит клиент C# консольного ..System.Net.Web Exception сервера WCF

После является исключением ,

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> 

В app.config клиента:

<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> 

Я использую 8 ГБ оперативной памяти в своем ноутбуке, и сервер и клиенты находятся на одной машине.

Увидев Processes в диспетчере задач я обнаружил, что использование W3wp.exe является в пределах от 700 МБ до 6 ГБ, когда-либо использование достигает предел 95% я получаю это исключение брошенных и память, используемую w3wp.exe получает уменьшено до 700 мб или около того, а затем оно увеличивается для каждого запроса, пока оно не достигнет примерно 95% памяти. Поэтому в этот момент я получаю это исключение.

+0

В следующий раз внесите свой вопрос правильно! – mybirthname

ответ

0

Очевидно, ваш сервер WCF хранит все данные в памяти, так что вы в конечном итоге исчерпаете доступную память. Это приводит к тому, что исключение OOM может быть выброшено на сервер, что может привести к его уничтожению. Это убивает TCP-соединение.

Исправьте ваш дизайн сервера таким образом, чтобы он не нуждался в неограниченном объеме памяти.

+0

Где изменить максимальный лимит? –

+0

В вашем местном хозяйственном магазине. Купите больше оперативной памяти. Или, прочитайте мой ответ. – usr