アプリケーション構成ファイルに system.runtime.serialization セクションを記述することで、WCF サービスに派生クラスを渡せるようになります。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.runtime.serialization> <dataContractSerializer> <declaredTypes> <!--ベースクラスの型を指定--> <add type="DataContractSample.Entity, DataContractSample, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"> <!--派生クラスの型を指定--> <knownType type="DataContractSample.Customer, DataContractSample, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> <knownType type="DataContractSample.Product, DataContractSample, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> </add> </declaredTypes> </dataContractSerializer> </system.runtime.serialization> </configuration>
この方法を使えば、サービスに渡す派生クラスが増えた場合に、ソースコードを変更せずに対応可能。
コードで指定する方法もあります。
でも、派生クラスも受け取るサービスは作らない方がいいです。クライアント側はどんなクラスを渡せるのか分かりづらいので。
上記の例なら、Customer と Product で別々のオペレーションにするべきです。