.NET SOAP Common types

Okay, I see know that this has been an explicit design decision on the part of SOAP so you're not actually supposed to do this. I found the following page that explains why:

Services share schema and contract, not class. Services interact solely on their expression of structures through schemas and behaviors through contracts. The service's contract describes the structure of messages and ordering constraints over messages. The formality of the expression allows machine verification of incoming messages. Machine verification of incoming messages allows you to protect the service's integrity. Contracts and schemas must remain stable over time, so building them flexibly is important.

Having said that there are two other possibilities:

  1. Generate the the web references in Visual Studio or using wsdl.exe. Then go into the generated Reference.cs (or .vb) file and delete the type explicitly. Then redirect to the type that you want that is located in another assembly.
  2. You can share types between web services on the client side by wsdl.exe and the /sharetypes parameter.