0

を含むbasicHttpBindingを介してWCF経由でクラスを送信しようとしていますが、Dictionary<byte, object>その中にはHashtable-があります。これは既存のコード要件のために必要であり、変更できません。

Dictionary<byte, object>これで、またはだけでクラスを送信するとHashtable、チャームのように機能しますが、ハッシュテーブルを含む辞書を送信すると、次のエラーメッセージが表示されます。

パラメータ http://tempuri.org/:UpdateResultをシリアル化しようとしたときにエラーが発生しました。InnerExceptionメッセージは「タイプ」「System.Collections.Hashtable」で、データコントラクト名は「ArrayOfKeyValueOfanyTypeanyType:http://schemas.microsoft.com/2003/10/Serialization/Arrays」ではありません。DataContractResolverを使用するか、既知のタイプのリストに静的に不明なタイプを追加することを検討してください。たとえば、KnownTypeAttribute属性を使用するか、DataContractSerializerに渡される既知のタイプのリストに追加します。詳細については、InnerExceptionを参照してください。

今、私はすべての「サービス既知のタイプ」属性をサービスインターフェースに追加しようとしましたが、運がありませんでした。

    [ServiceContract]
    public interface IServerProxy
    {
        [OperationContract]
        bool Connect(long FBUID, string SecretKey);

        [OperationContract]
        [ServiceKnownType(typeof(IDictionary<byte, Hashtable>))]
        [ServiceKnownType(typeof(IDictionary<Hashtable, Hashtable>))]
        [ServiceKnownType(typeof(IDictionary<object, object>))]
        [ServiceKnownType(typeof(IDictionary<object, IDictionary<object, object>>))]
        List<QueuedMessage> Update(long FBUID, string SecretKey);
    }

しかし、完全に正直に言うと、私はそのタグが何をするのか、そしてそれが私を助けるためにどのように(そしてもし)使用できるのかを完全に理解せずに盲目的にそのタグを使用しました。

だから、誰かが私が何をすべきか考えていますか?

ありがとう!

4

1 に答える 1

1

wcfのジェネリックに関する私の答えを参照してください。ジェネリックはSOAの状況では不可能です。この質問は、代替ソリューションを提案します。お役に立てれば

于 2012-05-11T14:51:26.037 に答える