Question:
If I send a HTTP request to a SOAP-webservice in the LAN, it takes a long time for SynchronousRequest to return and I get a false response. With version 9.4.1.26 it works.
I checked the traffic with Wireshark and with version 9.5.0.40 at the client side, the first response of the server is status "100 continue" and the second response is the "200 OK". With the old version of the library at the client, the first response of the server is "200 OK". This should be both ok, but the new version seems in this case not handle the status 100 correctly and waits until timeout.
I can reproduce this effect with three different SOAP webservices in our LAN.
The Chilkat log:
SynchronousRequest: DllDate: Jun 10 2014 ChilkatVersion: 9.5.0.40 UnlockPrefix: IPRODEHttp Username: SExxxxxx:Rxxxxx Architecture: Little Endian; 32-bit Language: Visual C++ 10.0 (32-bit) VerboseLogging: 1 domain: icom999999 port: 63306 ssl: 0 httpRequest: httpVersion: 1.1 verb: POST path: /icom contentType: text/xml;charset=utf-8 charset: windows-1252 sendCharset: 0 mimeHeader: SOAPAction: http://www.zeiss.de/icom/2009/pms/http/GetVersion User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MANM; rv:11.0) IProExt 2.0 (9.5.0.40) --httpRequest readTimeout: 300 connectTimeout: 10 fullRequest: httpRequest: httpVersion: 1.1 verb: POST path: /icom contentType: text/xml;charset=utf-8 charset: windows-1252 sendCharset: 0 mimeHeader: SOAPAction: http://www.zeiss.de/icom/2009/pms/http/GetVersion User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MANM; rv:11.0) IProExt 2.0 (9.5.0.40) --httpRequest HttpOptions: AddHostHeader: 1 AllowCookieResponseCaching: 0 AllowGzip: 1 ConnectTimeoutMs: 10000 CookieDir: FollowRedirects: 1 Login: LoginDomain: AuthMethod: MaxResponseSize: 0 MaxUrlLen: 2000 PasswordLen: 0 ProxyHostname: ProxyLogin: ProxyLogin: ProxyAuthDomain: ProxyPasswordLen: 0 ProxyPort: 80 ReadTimeoutMs: 300000 RequiredContentType: ResumePoint: 0 SaveCookies: 1 SendBufferSize: 65535 SendCookies: 1 SslProtocol: 0 UnavailableRetryCount: 0 UnavailableRetryWaitMs: 2000 --HttpOptions a_synchronousRequest: generateRequest: httpRequestGenStartLine: authOnly: 0 hasMimeBody: 1 genStartLine: startLine: POST /icom HTTP/1.1 --genStartLine --httpRequestGenStartLine genHeaderSb: getMimeHeaderHttp: headerField: SOAPAction: http://www.zeiss.de/icom/2009/pms/http/GetVersion headerField: User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MANM; rv:11.0) IProExt 2.0 (9.5.0.40) --getMimeHeaderHttp --genHeaderSb addCookies: Not auto-adding cookies. --addCookies addHostHeader: icom999999 --generateRequest fullHttpRequest: domain: icom999999 port: 63306 ssl: 0 openHttpConnection: Opening connection directly to HTTP server. httpHostname: icom999999 httpPort: 63306 ssl: 0 bUsingHttpProxy: 0 httpProxyAuthMethod: socket2Connect: connect2: hostname: icom999999 port: 63306 ssl: 0 connectSocket: domainOrIpAddress: icom999999 port: 63306 connectTimeoutMs: 300000 connect_ipv6_or_ipv4: Multi-threaded domain to IP address resolution AddrInfoList: AddrInfo: ai_flags: 0 ai_family: 2 ai_socktype: 0 ai_protocol: 0 ai_addrlen: 16 ai_canonname: (NULL) --AddrInfo --AddrInfoList connecting to IPV4 address... ipAddress: 172.16.1.153 connect: Waiting for the connect to complete... myIP: 172.16.1.58 myPort: 3105 socket connect successful. --connect --connect_ipv6_or_ipv4 --connectSocket --connect2 --socket2Connect connectElapsedMs: 480 HTTP connection succeeded. --openHttpConnection connectTime: Elapsed time: 520 millisec startLine: POST /icom HTTP/1.1 requestHeader: requestHeader: Content-Type: text/xml;charset=utf-8 SOAPAction: http://www.zeiss.de/icom/2009/pms/http/GetVersion User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MANM; rv:11.0) IProExt 2.0 (9.5.0.40) Host: icom999999:63306 Content-Length: 372 --requestHeader sendRequestHeader: sendHeaderElapsedMs: 0 --sendRequestHeader sendRequestBody: sendBodyElapsedMs: 0 --sendRequestBody readResponseHeader: responseHeader: HTTP/1.1 100 Continue --readResponseHeader statusCode: 100 statusText: Continue readResponseBody: Response has no Content-Length header. Non-chunked response with no Content-Length. readingUntilServerClosesConnection: Any errors reported within this context are not actual errors... WindowsError: Eine vorhandene Verbindung wurde vom Remotehost geschlossen. WindowsErrorCode: 0x2746 numBytesRequested: 4096 Failed to receive data on the TCP socket readNToOutput: Socket fatal error. --readingUntilServerClosesConnection --readResponseBody --fullHttpRequest success: 1 --a_synchronousRequest --fullRequest totalTime: Elapsed time: 126793 millisec Success. --SynchronousRequest --ChilkatLog
Your web server is sending a "100 Continue" response unexpectedly. Chilkat should've handled it, and this can be fixed. However, the workaround is to add the "Expect: 100-continue" to your request header. When this is done, Chilkat will expect the "100 continue" response, and everything should work.
To add the the "Expect: 100-continue" header, do this:
req.AddHeader("Expect","100-continue");where req is your CkHttpRequest object.