Be consistent in your configuration
I recently worked with a customer using BizTalk 2004. They were experiencing some very odd behavior where a WebService client would call into a BizTalk WebService and experience a long wait before the client finally got a timeout error. The timeout happend to correspond to the 120 second timeout configured in IIS.
Being fairly new to the Soap Receive Adapter code, I spent a couple hours looking over the code and some trace logs trying to understand what was happening. I finally noticed one very simple (yet easy to miss) mistake that the customer was making. They weren't being consistent in the configuration of the WebService. The Receive Port in BizTalk was configured as a Request-Response (two-way) port, as was the Web Method defined in the WSDL. However, within the WebMethod implementation, when they were calling the base.Invoke(...) function on the ServiceProxy base class they were passing true for the oneway parameter. This inconsistency broke the contract between the WebService Implementation and the code that interacted with the Message Box, thus leading to the inconsistent behavior.