I don't have time for a reproducer now, but I thought I'd post this and then go vent. I'm very angry.
<wsdl:message name="OpSoapIn">
<wsdl:part name="parameters" element="tns:Op"/>
</wsdl:message>
<wsdl:message name="OpSoapOut">
<wsdl:part name="parameters" element="tns:OpResponse"/>
</wsdl:message>
Where OpResponse is a complextType/sequence(xs:boolean, xs:choice(a,b)).
When the part names are "parameters", this generates a method signature returning bool, with the remaining parts of OpResponse as an "out" parameter. Change the name of the parts to anything else, and you get the expected behavior, which is for the operation to return an object of a type containing the bool and all the rest.
This took me over an hour to find, as I didn't want to believe that wsdl.exe was using the name of the part!!!
John
P.S. Is this documented somewhere?