I noticed using SoapUI that the DataContract (request) parameter of my OperationContract is considered "optional". (I also tested it and in fact i can avoid to pass the request at my wcf method, or pass it as null)
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:con="..." xmlns:data="...">
<soapenv:Header/>
<soapenv:Body>
<con:MyMethod>
<!--Optional:-->
<con:request>
<data:Id>?</data:Id>
</con:request>
</con:MyMethod>
</soapenv:Body>
</soapenv:Envelope>
On a DataMember, like Id in the example, i can put the attributes
[DataMember(IsRequired = true, EmitDefaultValue = false)]
public string Id {get; set;}
In this case if I don't put at all the xml Id part, or I put it has null I get a serializzation exception as response, and my OperatationContract method is never called, and therefore i can be sure in the implementation of my method that Id will be != null.
I don't know how to do this with the request itself though. The easy solution would be check in every Operation method if the request is null and in that case return an error message. I hope that there is a more versatile solution though