【问题标题】:C# Web Service Method with Optional Parameters带有可选参数的 C# Web 服务方法
【发布时间】:2017-07-02 13:52:29
【问题描述】:

我想用可选参数构建一个WebMethod

我知道设置MessageName 的方法。

[WebMethod(MessageName = "Default")]
public void SearchPerson(String finger_print_base64)
{

}

[WebMethod(MessageName = "AddThreshold")]
public void SearchPerson(String finger_print_base64,int threshold)
{

}

但是我想设置两个相同类型的参数。

[WebMethod(MessageName = "AddThreshold")]
public void SearchPerson(String finger_print_base64,int threshold)
{

}

[WebMethod(MessageName = "AddMinMatches")]
public void SearchPerson(String finger_print_base64,int mini_matches)
{

}

Visual Studio 告诉我一个错误。

"SearchPerson 已经有一个具有相同类型参数的方法 "

【问题讨论】:

  • 错误很明显吧?你想达到什么目的?
  • 你有三个签名相同的方法。您如何期望编译器检测到它们不同?虽然MessageName 属性用于web 服务 中的方法重载,但您的代码应该首先编译。
  • 您应该关注您的方法声明,而不是 webmethods 的名称。非常明显的错误,你有一个签名相同的方法。
  • 这个项目是一个HTTP WEB API。我想建立一个用户可以向服务器发布一些信息的接口。finger_print_base64是一个集成参数,阈值或mini_matches是可选参数。所以我只想知道如何实现这个接口。

标签: c# asp.net web-services


【解决方案1】:

您有两个签名相同的方法,至少更改一个参数的数据类型或添加另一个参数,如(布尔值)!

更改参数名称不是解决方案。

【讨论】:

    【解决方案2】:

    起初:不支持web-methods中的重载,IIS无法处理。

    现在编译器不能在同一个类下构建两个或多个具有相同名称和签名的方法,因为,它如何能够不混淆地寻址“dll”文件中的方法! ,,

    如果您想调用您的方法,请使用接口或抽象类,并在新的三个类中覆盖其中的方法并调用它们:)

    “MessageName”只是一个盟友

    没有重载 因为方法名变成了一个(地址,或 Url 等),所以应用程序将路由到它而不关心它的签名、编程特性甚至它的编程语言。

    【讨论】:

      猜你喜欢
      • 2011-11-25
      • 2015-03-15
      • 1970-01-01
      • 2017-05-30
      • 2017-03-10
      • 1970-01-01
      • 2015-03-31
      • 2013-08-11
      • 2010-11-02
      相关资源
      最近更新 更多