【问题标题】:Sending back a hashtable inside a dictionary in WCF在 WCF 的字典中发回哈希表
【发布时间】:2012-05-19 22:04:38
【问题描述】:

我正在尝试通过包含Dictionary<byte, object> 的basicHttpBinding 通过WCF 发送一个类,其中包含Hashtable - 由于现有代码要求,这是必需的,并且无法更改。

现在,如果我发送一个只包含 Dictionary<byte, object>Hashtable 的类,它就像一个魅力,但是当我发送一个包含 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);
    }

但老实说,我盲目地使用了该标签,没有完全了解它的作用以及如何(以及是否)可以使用它来帮助我。

那么,有人知道我应该怎么做吗?

谢谢!

【问题讨论】:

  • 你试过[ServiceKnownType(typeof(HashTable))]吗?不过,更一般地说,IMO 在这里发送哈希表是一种不好的做法。 “现有的代码需求”不是让不可能的东西发挥作用的魔杖——更好的办法是以可行的简单方式转移它,然后将它调整到另一端需要的东西之后
  • 好吧,让我退后一步,解释一下我要做什么——我们正在使用一个旧的、现有的套接字框架,它不支持 HTTP 隧道,我想包装对于有防火墙的用户,Web 服务内的整个过程只允许端口 80 上的流量。所以这个框架的要求之一是使用哈希表,删除它们可能会启用我们的 WCF 服务,但也会破坏我们的 TCP 服务。
  • 你的 TCP 服务支持字节;只有字节;不确定哈希表是如何相关的......如果问题是您之前使用过BinaryFormatter(顺便说一句,这不一定是一个安全的选择),那么也许使用NetDataContractSerializer here (而不是DataContractSerializer;谷歌搜索会告诉你如何配置)

标签: .net wcf dictionary hashtable


【解决方案1】:

有关 wcf 中的泛型,请参阅 my answer。泛型在 SOA 情况下是不可能的。 This question 提出了一个替代解决方案。希望这会有所帮助

【讨论】:

    猜你喜欢
    • 2013-03-21
    • 2012-08-23
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 2013-01-15
    • 2011-06-10
    相关资源
    最近更新 更多