ФОС базовое соединение закрыто: непредвиденная ошибка при приеме

я использую приложение RestClient для связи с моей службой WCF .и я получаю следующее исключение

The underlying connection was closed: An unexpected error occurred on a receive.

это код C#, который я использую

            string q = string.Format(@"xxxxxxxxxxxxxxxxxxxxxxxxxxx");
            WebClient client = new WebClient();
            string Url = string.Format("{0}/Get?queries={1}", BaseUrl,HttpUtility.UrlEncodeUnicode(q));
            client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
            var result = client.DownloadString(Url);
            Console.WriteLine("======================output================================");
            Console.WriteLine(result);
            Console.WriteLine("===========================================");

вот сообщение об ошибке

System.Net.WebException was caught
  HResult=-2146233079
  Message=The underlying connection was closed: An unexpected error occurred on a receive.
  Source=System
  StackTrace:
       at System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request)
       at System.Net.WebClient.DownloadString(Uri address)
       at System.Net.WebClient.DownloadString(String address)
       at RestClient.Program.GetRecordsTest() in C:UsersWiemonDownloadsRestAppClientRestAppClientProgram.cs:line 118
  InnerException: System.IO.IOException
       HResult=-2146232800
       Message=Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.
       Source=System
       StackTrace:
            at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
            at System.Net.FixedSizeReader.ReadPacket(Byte[] buffer, Int32 offset, Int32 count)
            at System.Net.Security._SslStream.StartFrameHeader(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)
            at System.Net.Security._SslStream.StartReading(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)
            at System.Net.Security._SslStream.ProcessRead(Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)
            at System.Net.Security._SslStream.Read(Byte[] buffer, Int32 offset, Int32 count)
            at System.Net.TlsStream.Read(Byte[] buffer, Int32 offset, Int32 size)
            at System.Net.PooledStream.Read(Byte[] buffer, Int32 offset, Int32 size)
            at System.Net.Connection.SyncRead(HttpWebRequest request, Boolean userRetrievedStream, Boolean probeRead)
       InnerException: System.Net.Sockets.SocketException
            HResult=-2147467259
            Message=An existing connection was forcibly closed by the remote host
            Source=System
            ErrorCode=10054
            NativeErrorCode=10054
            StackTrace:
                 at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
                 at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
            InnerException: 

вот моя привязка

<binding name="wsHttpEndpoint" >
                    <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="16384" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
                    <security mode="Transport">
                        <transport clientCredentialType="Certificate" />
                        <message clientCredentialType="Certificate" />
                    </security>
                </binding>

и мое поведение конечной точки, а не то, что я установил maxItemsInObjectGraph="2147483647"

<behavior name="MyEndpointBehavior">
                    <dataContractSerializer maxItemsInObjectGraph="2147483647" />
                    <clientCredentials>
                        <clientCertificate findValue="xxxxxxxxxxxxxxxxxx" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My" />
                        <serviceCertificate>
                            <authentication certificateValidationMode="None" revocationMode="NoCheck" />
                        </serviceCertificate>
                    </clientCredentials>
                </behavior>

4 ответов


его общее (общее) сообщение.

вы должны использовать Trace Viewer Tool (SvcTraceViewer.exe), чтобы узнать ошибку сервера


У меня были подобные ошибки, исходящие из глубины моих Привязок http в WCF.

client - > базовое соединение было закрыто: произошла непредвиденная ошибка при получении.

клиент -> не удается прочитать данные из транспортного соединения: существующее соединение было принудительно закрыто удаленным узлом.

сервер (получил это с помощью "procdump") - > операция ввода-вывода была прервана из-за выхода потока или приложения запрос

В конце концов после многих часов я наткнулся на HTTP.sys logging (in C:\WINDOWS\System32\LogFiles\HTTPERR ) и я обнаружил, что автономные соединения службы WCF были принудительно удалены (специально) из-за неясной проблемы конфигурации (минимальная скорость отправки байтов в секунду). К сожалению, потребовалось еще несколько часов, чтобы перенастроить это (вы не можете сделать это через "netsh http add timeout", поэтому вам нужно сделать это в приложении или в IIS, когда он не является самодостаточным).


Я не знаю, является ли та же ошибка, но в моем случае исключение было в Json, что не может преобразовать значение даты, потому что оно было пустым.

DateTime значения, которые больше, чем DateTime.MaxValue или меньше, чем DateTime.Значение MinValue при преобразовании в UTC не может быть сериализовано в JSON.

средство просмотра трассировки было очень полезно для поиска проблемы.


настройка трассировки WCF в приложении.config / web.config и проверить ошибка.svclog по (он будет создан рядом с вашим двоичным файлом) для деталей. В моем случае это было из-за использования инициализатора Auto - property (свойство без сеттера) - a функция от C# 6.0

<Message>No set method for property 'FailedCount' in type 'MyProject.Contracts.Data.SyncStatusByVersion'.</Message>
<StackTrace>   at System.Runtime.Serialization.DataContract.DataContractCriticalHelper.ThrowInvalidDataContractException(String message, Type type)
               at WriteSyncStatusByVersionToJson(XmlWriterDelegator , Object , XmlObjectSerializerWriteContextComplexJson , ClassDataContract , XmlDictionaryString[] )
               ...
</StackTrace>

настройка трассировки WCF:

<system.diagnostics>
    <sources>
      <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true" >
        <listeners>
          <add name="xml"/>
        </listeners>
      </source>
      <source name="System.ServiceModel.MessageLogging">
        <listeners>
          <add name="xml"/>
        </listeners>
      </source>
      <source name="myUserTraceSource" switchValue="Information, ActivityTracing">
        <listeners>
          <add name="xml"/>
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="Error.svclog" />
    </sharedListeners>
</system.diagnostics>