I have a Windows Server 2008 R2 box with a client application trying to connect to another server's web service on port 443. The only access I have to the client application is to configure the URL of the server.
When I configure the server's service URL and attempt to connect to the service, I get the following stack trace in my client application log:
StackTrace:
at System.Net.HttpWebRequest.GetResponse()
at QBWebConnector.QWCReader.CheckCertURL()
Message (description of the exception):
The underlying connection was closed: An unexpected error occurred on a send.
Source (name of application or object that caused the exception):
System
TargetSite (method that threw the exception):
System.Net.WebResponse GetResponse()
InnerException:
System.IO.IOException: Received an unexpected EOF or 0 bytes from the transport stream.
at System.Net.FixedSizeReader.ReadPacket(Byte[] buffer, Int32 offset, Int32 count)
at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult)
at System.Net.TlsStream.CallProcessAuthentication(Object state)
at System.Threading.ExecutionContext.runTryCode(Object userData)
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result)
at System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.PooledStream.Write(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.ConnectStream.WriteHeaders(Boolean async)
It looks to me like Windows is partially suppressing my client application's outbound request. What would be doing this? It doesn't appear to be the firewall because the same thing happened with the firewall disabled completely.
I can monitor the Apache SSL logs on the server side.
When I request the server URL directly via IE on the client, I get the following Apache log line:
192.168.1.111 - - [30/Aug/2012:23:35:36 -0700] "GET /qb-mirror/ HTTP/1.1" 200 2590 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"
When I run the client application (which will be requesting the URL as a SOAP service), there is a long 15-20 second delay. Then the following Apache log line appears:
192.168.1.111 - - [30/Aug/2012:23:41:01 -0700] "-" 408 1567 "-" "-"
Why is this request different?