Here's an anecdote for the WTF inbox. I assure you this is very real, but I cannot divulge any of the specifics.
Some time ago a friend of mine was talking to a web services vendor, who was explaining his versioning scheme. The vendor's approach was to make all of the web service functions accept a single parameter describing the function being called, and the version of the function requested. Prototypically:
public object Foo(FunctionCallInfo)
And what is FunctionCallInfo, you ask? Why, it is a strict XML document adhering to a schema that he would provide.
My observation, which my friend also arrived at independently, was that this person was basically creating an implementation of web services inside of web services. So nat'ralists observe, a flea / Hath smaller fleas that on him prey.
XML: the cause of, and solution to, all of your development problems.
What would do in this situation?
we do that here actually, it’s becuase the FunctionCallInfo is too complex.
otherwise you get
Foo(m1,m2,m3,m4,m5,m6,m7)
then in v2 you get
Foo2(m1,m2,m3,m4,m5,m6,m7,m8)
The answer to your problem is to define a new complex type to pass as an argument. A code generator run against your wsdl (like .NET’s wsdl.exe) will emit a class there. So you get this:
Foo(MyType bar)
I’m not sure if I was completely clear, but what the vendor wanted to do instead was this:
Foo(string bar)
And then write his own code to parse the xml string passed in. Hopefully that isn’t what you’re doing, because that is ridiculous.