私はちょうどこれを行った、あなたは、インターフェイスにKnownTypesAttributeを追加する必要があることがわかった。
[ServiceContract]
[ServiceKnownType(typeof(MyContract1)]
[ServiceKnownType(typeof(MyContract2)]
[ServiceKnownType(typeof(MyContract3)]
public interface IMyService
{
[OperationContract]
object TakeMessage();
[OperationContract]
void AddMessage(object contract);
}
あなたの実装では、あなたのDataContractsの1つであることを確認する必要があります。
EDIT
あなたが契約の多くを持っている場合は、あなたがKnownTypesにそれらを追加するためにリフレクションを使用することができます。
[ServiceContract]
[ServiceKnownType("GetKnownTypes", typeof(KnownTypeHelper))]
public interface IMyService
{
[OperationContract]
object TakeMessage();
[OperationContract]
void AddMessage(object contract);
}
これはそれを行うための非常にクリーンな方法である、と
internal static class KnownTypeHelper
{
public static IEnumerable<Type> GetKnownTypes(ICustomAttributeProvider provider = null)
{
var types = Assembly.GetExecutingAssembly().GetTypes().Where(a => a.Namespace == "Company.Path.To.DataContractsNamespace").ToArray();
return types;
}
}
次に、あなたのインターフェイスを宣言することができます。
ああ!私は...これは私が探していたものです...多くのこのような高速応答のおかげで。 – user1312242
OMG !!素晴らしいです...これはlessと&moreを書くように聞こえますが、私は反射が少しパフォーマンスを低下させることを要求していると思います... – user1312242