If a
SoapClient object sets the "Timeout"
ConnectorProperty, and the server cannot respond in the specified "Timeout" value, the SOAP Toolkit 2.0
SoapConnector sends a second SOAP request after the timeout expires.
This is caused by the underlying http library (HttpLib) that the
SoapConnector uses.
A supported hotfix is now available from Microsoft, but it is only intended to correct the problem that is described in this article. Only apply it to systems that are experiencing this specific problem. This hotfix may receive additional testing. Therefore, if you are not severely affected by this problem, we recommend that you wait for the next SOAP 3.0 Toolkit that contains this hotfix.
To resolve this problem immediately, contact Microsoft Product Support Services to obtain the fix. For a complete list of Microsoft Product Support Services phone numbers and information about support costs, visit the following Microsoft Web site:
NOTE: In special cases, charges that are ordinarily incurred for support calls may be canceled if a Microsoft Support Professional determines that a specific update will resolve your problem. The typical support costs will apply to additional support questions and issues that do not qualify for the specific update in question.
The English version of this fix has the file attributes (or later) that are listed in the following table. The dates and times for these files are listed in coordinated universal time (UTC). When you view the file information, it is converted to local time. To find the difference between UTC and local time, use the
Time Zone tab in the Date and Time tool in Control Panel.
Date Time Version Size File name
------------------------------------------------------------
11-Feb-2002 1.2.911.0 118,272 bytes hlsc10.dll
11-Feb-2002 1.2.911.0 25,088 bytes wisc10.dll
To work around this issue, use one of the following methods:
- Method 1: Upgrade to the SOAP 3.0 Toolkit, because the SOAP 3.0 Toolkit does not use the http library (HttpLib).
- Method 2: Delete the hlsc10.dll in a client-to-server scenario.
Microsoft has confirmed that this is a problem in the Microsoft products that are listed at the beginning of this article.
Steps to Reproduce the Behavior
- Create a Visual Basic 6.0 ActiveX DLL Project.
- Insert the following code in a class module that is named SOAPTimeout:
Option Explicit
Public Function Test() As String
On Error Resume Next
Dim TestObj As Object
Dim Testi As Long
For Testi = 1 To 1000000
Set TestObj = CreateObject("ADODB.Connection")
Set TestObj = Nothing
Next
Test = "Test Complete"
End Function
- Generate SOAPTimeoutTest.dll.
- Run the Soap Trace Utility (which is included with the SOAP Toolkit) for Formatted Trace at: local port = 8080
- Use the WSDL Generator to generate .wsdl and .wsml files.
- Specify SoapTimeout as the name of the service, and then set the local path to the COM DLL that is generated in the first section.
- Check the Test Web method so that it is exposed on the site.
- Set the Listener Uniform Resource Identifier (URI) as follows: http://locahost:8080/SoapTimeout/
-
Create a Visual Basic 6.0 Standard EXE with the following code:
Private Sub Form_Load()
Dim ClientTest As New MSSOAPLib.SoapClient
Dim Str As String
ClientTest.ClientProperty("ServerHTTPRequest") = False
ClientTest.mssoapinit "http://localhost:8080/SOAPTimeout/SoapTimeout.wsdl"
ClientTest.ConnectorProperty("Timeout") = 2000
Str = ClientTest.Test
MsgBox Str
End Sub
- Run the Client. The Soap Trace Utility shows that a second request is sent after the timeout interval expires.
If you remove or increase the "Timeout" value, or you install the hotfix, the second request is not sent.