>2) CURSORTOXML() creates the XML string in one pass internally, while your code is assembling it in VFP. This might have caused memory allocation issues. In this case, SYS(1104) before calling STRCONV() should fix it.
Unfortunately, this doesn't work. I tried putting it in front of the STRCONV() in the Web Service and also in the XML completion and it's the same result.
I use MSXML.DOMDocument to create the XML. The only difference I can see with this approach as oppose to CURSORTOXML() is that no carriage return is done after each CreateElement(). However, I don't think this should make a difference.