I've been catching up on MSDN magazine lately and back-reading WS-specific articles. I found a great quote this morning from the March edition named Increase Your App's Reach Using WSDL to Combine Multiple Web Services...
When you tell client developers about the Web service, or when you publish it using services like UDDI, you'll point users to the location of this static WSDL file instead of using the dynamically generated file created by accessing the ASMX URL with "?WSDL" on your query string. Of course, like all good Web service citizens you've been saving that dynamic file as a static file once you go into production, right? Of course you have. It's not a contract if you're dynamically generating it using reflection. You could also have the dynamically generated WSDL point at your static WSDL using the mechanism that you will find described at Building XML Web Services Using Industry Standardized WSDLs.
Do you publish static WSDL documents or rely on ?WSDL? :-)