【问题标题】:superfluous parameters in call to ASMX service调用 ASMX 服务时的多余参数
【发布时间】:2014-03-07 18:29:15
【问题描述】:

在 ASP.NET 中,为什么可能调用 Web 服务的函数,其参数比函数所要求的要多(多余的参数根本不用)?


我需要做一种逆向工程。 我得到了一个带有 myFunction(param A, param B) 函数的 Web 服务

我有一个网站调用更多参数的服务

MyService.MyFunction(A,B,C);

它似乎有效,但我不明白为什么?

【问题讨论】:

    标签: asp.net web-services asmx


    【解决方案1】:

    它不是“网络服务功能”。就客户端而言,它是 WSDL 文档中的一组描述。根据该描述,生成客户端代码。该客户端代码会导致将 XML (SOAP) 发送到服务。

    这可能会不同步。例如,服务的版本 1 可能在操作上有 3 个参数。为版本 1 创建了一个客户端,因此它发送 3 个参数。

    服务的第 2 版可能会删除一个参数。如果客户端没有更新,那么它仍然会发送 3 个参数。服务可以选择忽略额外的参数。

    【讨论】:

    • 看来他选择忽略多余的参数。所以你说,这就是服务管理额外参数的方式?
    • 很可能,它根本不反序列化额外的参数。
    • 顺便说一句,只是为了确保您知道:ASMX 是一项遗留技术,不应该用于新的开发。 WCF 或 ASP.NET Web API 应该用于 Web 服务客户端和服务器的所有新开发。一个提示:Microsoft 已停用 MSDN 上的 ASMX Forum
    【解决方案2】:

    您还可以传递带有您需要的参数的模型,例如,如果您期望:

    firstname, lastname, city
    

    您可以将对象设置为:

    public class Person {
        public string firstname { get; set; }
        public string lastname { get; set; }
        public string city { get; set; }
    }
    

    并让您的方法接收Person 对象,例如

    public bool SavePerson(Person person) { ... }
    

    稍后,您可以简单地将更多属性附加到 Person 对象。

    所以,这实际上可能是正在发生的事情......让我们想象一下,您可以传递 firstnamelastname,但 city 是可选的。

    【讨论】:

    • 看来我错了让我明白了。我想知道为什么 web 服务函数接受调用的参数比声明的参数多?
    • 我可以随心所欲地添加,这是一个简单的 POST/GET...所以我可以传递 n 参数...它只需要它需要的参数并忽略其他一切......也许你正在传递一些用于记录的东西......调用简单忽略。一个 Web 服务,顾名思义 web,它是一个简单的 POST/GET 甚至发送 JSON 或 XML 值...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 2012-10-31
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多