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

c#, wcf, wcf-rest

Solution

Its common (generic) message.

You should use Trace Viewer Tool (SvcTraceViewer.exe) to find out server error

Problem

I am using a RestClient app to communicate with my WCF service .and I am getting the following exception ``` The underlying connection was closed: An unexpected error occurred on a receive. ``` This is the C# code I use ``` 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("==========================================="); ``` Here is the error message ``` 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:\Users\Wiemon\Downloads\RestAppClient\RestAppClient\Program.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: ``` Here is my binding ``` <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> ``` And my endpoint behavior ,not that I set 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> ```

Original source