Hi list. Just when I thought I was getting to grips with JMeter, a client threw me a curveball :o(
I'm trying to load test a third-party SOAP web service to confirm it can cope that the traffic we're going to be putting down it. I have, from one of the developers, a precise XML conversion with three samples -- and initial request and two extra information requests -- which works fine in a telnet session to port 80 on the server. So, my first instinct was to feed it into a SOAP Sampler and go home earlier. Unfortunately, JMeter's SOAP parsing is mangling the request on the way through and I think the third-party server doesn't like it. It's some sort of XML namespace problem but I'm rather new at this bit and I can't see what's wrong. Here's what the developer gave me: ================================================== POST /foo.asmx HTTP/1.1 Connection: Close User-Agent: HostDriver26/2.6.1 Content-Type: text/xml SOAPAction: http://foo.soap.action Content-Length: 842 Host: foo <Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xmlns=" http://schemas.xmlsoap.org/soap/envelope/"><Body><foo xmlns=" http://foo.soap.action" /></Body></Envelope> ================================================== (I've had to "foo" some bits out because it's commercially sensitive, but hopefully you see the gist. The Content-Length is right in the original :o) Note that this has some problems, like no XML declaration tag. I suspect the fact the developers and clients are all Microsoft programmers is the root of my problem. Anyway, I've cut and pasted this snippet, as appropriate, into a Webservice(SOAP) Request sampler. I didn't configure through the WSDL but manually input server name, path, SOAPAction and data. I've also turned off Memory Cache and turned on Read SOAP response. The Data part of the Sampler is the whole body of the request above (i.e. <Envelope ...>...</Envelope>). Now here is what Jmeter sends, grabbed through an outgoing recording HTTP proxy: ================================================== POST /foo.asmx HTTP/1.0 Host: foo:80 Content-Type: text/xml; charset=utf-8 Content-Length: 917 SOAPAction: "http://foo.soap.action" <?xml version='1.0' encoding='UTF-8'?> <xmlns:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xmlns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd=" http://www.w3.org/2001/XMLSchema"> <xmlns:Body> <foo xmlns="http://foo.soap.action" /> </xmlns:Body> </xmlns:Envelope> ================================================== JMeter has changed the xmlns declarations, and the server doesn't like it. This is what I get back: ================================================== HTTP/1.1 500 Internal Server Error. Connection: close Date: Tue, 28 Mar 2006 11:33:11 GMT Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET X-AspNet-Version: 1.1.4322 Cache-Control: private Content-Type: text/xml; charset=utf-8 Content-Length: 485 <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd=" http://www.w3.org/2001/XMLSchema"> <soap:Body> <soap:Fault> <faultcode>soap:Server</faultcode> <faultstring>Server was unable to process request. --> This is a reserved namespace. Line 2, position 71.</faultstring> <detail /> </soap:Fault> </soap:Body> </soap:Envelope> ================================================== Is there anyway to get the SOAP sampler working? Does anyone more clueful/experienced than I have a suggestion? Failing that, I thought I'd try the TCP sampler out. I wrote three TCP Sampler requests to open port 80 on my client's server and push the raw text the developer gave me down the port. That works fine... for one Sampler at a time. As soon as more than one Sampler is in the Thread Group, the second and all subsequent ones fail instantly (0 milliseconds sample time). Looking at the debug log, it's failing because my SOAP call is closing the HTTP connection after the invocation but the TCP Sampler is trying to reuse the connection in the second Sampler call. The docs suggest that changing the case of the server name will prevent this behaviour, but it doesn't; the docs also suggest that this should cause a new connection to be reopened, but that doesn't seem to work either. Is there anything else I can try before I crack the source code out?

