【问题标题】:ASP.Net Webservice receiving an undefined number of key-value pairsASP.Net Webservice 接收未定义数量的键值对
【发布时间】:2012-01-13 18:24:24
【问题描述】:

我一直在与一些表单处理提供商合作,他们似乎有一个用于键值对数据的通用接收器。我正在尝试这样做,但我尝试使用的每个数据结构都实现了一个接口,因此无法序列化容器以在 web 方法中使用。

我什至尝试过使用基本的“对象”数据类型 - 没有成功

[WebMethod] 
        public void processResponse( object lead ){
            Dictionary<string, string> DList = (Dictionary<string,string>) lead;

如何使用此 Web 服务接收未定义数量的键值对,以便我可以对接收到的数据执行业务逻辑并使用统一的输入法智能地路由数据?静态类型的类在这种情况下不起作用,因为不同类型的潜在客户具有不同数量的字段/属性。

【问题讨论】:

  • 您是否有理由使用旧版 ASMX 服务而不是 WCF?
  • 那么,您的意思是没有理由不使用 WCF?那么我的建议是使用WCF。
  • 我对 WCF 一无所知 - 并且停止学习新方面的进步并不是真正的精明实践。也许在未来这将是一种选择
  • 这是因为 WCF 使用 DataContractSerializer 可以序列化键值对。如果您将Dictionary&lt;T,K&gt; 作为参数,它将无法与 *.asmx 一起使用,但可以与 WCF 服务一起使用。
  • 根本没有被嘲讽。 ASMX 中几乎所有限制的答案都是“使用 WCF”。 “我没有时间学习 WCF”的答案是“学习 WCF 的子集并不需要花费大量时间,这与您使用 ASMX 所做的相同”。

标签: c# .net web-services asmx


【解决方案1】:

切换到 WCF,它默认使用能够序列化键值对的 DataContractSerializer 类,例如 Dictionary&lt;T,K&gt;

您的服务的基本结构将完全相同,使用 BasicHttpBinding 您将拥有几乎相同的基于 Http 和 Soap 的通信协议。花 30 分钟学习 WCF 教程,您将几乎不想回到旧的 *.asmxes。

【讨论】:

    【解决方案2】:

    我最终做的是添加一个通用处理程序。我将 QueryString 参数复制到 Dictionary 并使用那里的值。它设置了数据收集的中心点,我能够从那里应用我的业务逻辑——似乎符合我想要的目的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 2019-03-10
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      相关资源
      最近更新 更多