WCFクライアントプロキシ例外 - 「既知のタイプのリストにタイプを追加できません」

StackOverflow https://stackoverflow.com/questions/3546813

質問

この例のように、サービスコードの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>))]
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top