WCFクライアントプロキシ例外 - 「既知のタイプのリストにタイプを追加できません」
-
30-09-2019 - |
質問
この例のように、サービスコードのWCFクライアントプロキシの作成に問題があります。
// data classes
[KnownType(typeof(ClassA))]
[KnownType(typeof(ClassB))]
public abstract class BaseClass : Dictionary<string, ITest>
{
}
public class ClassA : BaseClass
{
}
public class ClassB : BaseClass
{
}
public interface ITest
{
}
// service
[ServiceContract]
public interface IService1
{
[OperationContract]
BaseClass Method();
}
public class Service1 : IService1
{
public BaseClass Method()
{
...
}
}
VSで「サービスリファレンスを追加」を使用してWCFプロキシを作成しようとするたびに失敗し、トレースログが表示されます
タイプ 'wcfproxytest.classa'は、同じデータ契約名を持つ別のタイプ 'wcfproxytest.classb'から既知のタイプのリストに追加できません。http://schemas.microsoft.com/2003/10/serialization/Arrays:RARAYOFKEYVALUEOFSTRINGANYTYPE'すでに存在しています。特定のタイプの異なるコレクションがある場合 - たとえば、リストu003CTest>テスト[]、両方を既知のタイプとして追加することはできません。既知のタイプリストに追加するために、これらのタイプの1つのみを指定することを検討してください。
エラーメッセージが何を言っているかを見ることができますが、これには他の方法があります(クラスのリファクタリング以外)。私は、私の例と同じ方法で書かれたクラスを持っているレガシーシステムを扱っており、それらを書き直すことは、このものがシステムのまさに核心にあるため、選択肢ではありません。
何か案は?ありがとう!
解決
私は、問題を周回する2つの既知のタイプを提供する必要がないようにコードをリファクタリングすることにしました。その後、約300の構文エラーが機能しました。私はそれをする他の方法に興味がありますが...
他のヒント
追加してみてください:
[KnownType(typeof(Dictionary<string, ITest>))]
所属していません StackOverflow