【问题标题】:Passing a Complex Type as a Parameter to an ASMX Service将复杂类型作为参数传递给 ASMX 服务
【发布时间】:2011-12-07 21:49:24
【问题描述】:

我正在尝试用 C# 编写一个简单的 ASMX Web 服务。在我的一生中,我无法理解或找出如何接受比原语更复杂的参数。

是否可以这样做:

[WebMethod]
public string MyMethod(SomeStruct parameter)
{
}

【问题讨论】:

  • 关于使用 ASMX 的复杂类型的文章。 encosia.com/…。我建议改用 WCF 并使用 SVC
  • @JohnSaunders:取决于您使用 ASMX 的目的。对于仅从 JavaScript 调用的简单端点,WCF 与 ASMX(或什至 HttpHandler,就此而言)相比是狗。在配置麻烦和 DataContractJsonSerializer 的缺点之间,当 ASMX 已经做了他们需要的事情时,推动人们“升级”到 WCF 是没有帮助的。尤其是即将到来的 Web API。
  • @JohnSaunders:我经常在需要额外灵活性的情况下使用 WCF(但 ASMX 与 WCF 与 OP 的问题毫无关系)。 WCF 在 4.0 中绝对仍然是 Web 工作的狗,这就是为什么它继续看到如此低的采用率并且 Web API 是必要的。
  • @JohnSaunders:多年来也没有针对 HttpHandlers 的任何错误修正......因为它们都没有需要 修正它们的优点。基于 MSDN 文档做出假设是相当遥远的事情。特别是考虑到 Add New Item > Web Service 仍然存在,并且不仅在 VS2010 而且在新的 VS11 开发者预览版中都指向 ASMX 模板。无论如何,这很快就会成为一个没有实际意义的问题,因为 Web API 比 ASMX 和 WCF 的当前状态都好得多。
  • @JohnSaunders:这就是为什么我特别开始说这取决于他是否将它用于客户端回调或 WCF 确实有意义的其他东西。我从未声称 Web API 是 ASMX,但它也与当前的 WCF 方法背道而驰。现在从 ASMX 迁移到 WCF 而不是明年直接迁移到 Web API 将是毫无意义的练习。如果您专注于“连接系统”,其中 WCF 实际上是对 ASMX 的重大改进,您可能没有意识到 WCF 目前在客户端工作方面是一个倒退。这不仅仅是“ASMX 没有损坏”的问题。

标签: c# asp.net web-services


【解决方案1】:

对于其他有相同问题的人。答案是使用Soap

至于为什么使用 ASMX 服务而不是 WCF,有几个原因:

  1. 小型网络服务更易于配置和部署
  2. 其他开发人员正在使用并期望使用 ASMX 服务

虽然第一个原因值得商榷,但对于第二个原因,短期内确实无能为力,尤其是在与公司以外的开发人员合作的情况下。

【讨论】:

    【解决方案2】:

    试试这个:

    [WebMethod]
    public string MyMethod( )
    {
       var parameter = new JavaScriptSerializer().Deserialize<SomeStruct>(HttpContext.Current.Request["parameter"]);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-05
      • 1970-01-01
      • 1970-01-01
      • 2018-12-06
      • 1970-01-01
      • 2011-07-10
      • 1970-01-01
      • 2015-07-10
      相关资源
      最近更新 更多