【问题标题】:WebMethod called with or without parameters带或不带参数调用的 WebMethod
【发布时间】:2019-10-19 20:31:03
【问题描述】:

我要做的是设置一个通过 IIS 公开的 WCF Web 服务,该服务具有一种称为GetArticle 的方法。必须使用一些强制性参数(例如 userName 和 password)以及其他可选参数(例如 brand)调用此方法。

所以方法签名是这样的:

[WebMethod]
public void GetArticle(string userName, string password, string brand)

将使用 Web 服务的客户端通过查询字符串调用该方法,因此我会收到:

http://localhost:5985/WebService?op=GetArticle&userName=ADMIN&password=ADMIN&brand=BRAND

并且该方法将正确返回一些数据。由于这里没有问题,但是如果客户端只使用前两个参数调用方法,则需要返回其他数据,如下所示:

http://localhost:5985/WebService?op=GetArticle&userName=ADMIN&password=ADMIN

有人可能会想:好吧,我只用我需要的参数编写了两个不同的方法,我公开它们,我们就完成了。我可以,但是客户端(不是我的,它是第三方软件)必须只有一个方法可以调用,所以如果它想返回一些数据,它只用用户名和密码调用方法如果它想要一些其他数据,它会调用 GetArticle(username, password, brand)。

我已经阅读了关于 WCF 中的可选参数的信息,并且似乎没有任何方法可以在不指定每个参数的情况下调用 webmethod,也没有两个具有相同名称和不同签名的方法(重载)。我已经尝试在[WebMethod] 标签内使用MessageName 属性,例如:

[WebMethod (MessageName = "GetBrands")]
public void GetArticle(string userName, string password, string brand)
{
   // Do stuff...
}

[WebMethod]
public void GetArticle(string userName, string password)
{
   // Do other stuff...
}

但我仍然必须使用不同的名称来调用这些方法。我也尝试省略我不想发送的参数,但出现异常。

是否有任何解决方法来实现这一点?我知道重载是一个与 IIS 相关的问题,而不是与 WCF 相关的问题,但对我来说完全没有任何解决方案似乎很奇怪......

提前感谢您的帮助。

【问题讨论】:

  • @LeonardoSeccia 我知道,但这就是所要求的。实际上,Web 服务有一个 IP 过滤器,它只接受一个地址,并且用户名和密码在从另一个 Web 服务中提取数据之前被加密。

标签: c# web-services wcf optional-parameters


【解决方案1】:

像你描述的那样在 HTTP GET 查询中传递凭据是一个糟糕的想法,它非常不安全,应该避免。

无论如何做你想做的事,你不能使用可选参数,WebMethod需要一个特定的签名......因此你需要使用默认参数......即。 public void GetArticle(string userName, string password, string brand="")

【讨论】:

  • 我想过这样的事情(默认为string.Empty或null参数),但客户端仍应指定该参数,否则会出现异常。
  • 实际上,由于将使用 Web 服务的客户端应用程序的技术限制,我不得不迁移到 PHP。无论如何,谢谢你的帮助。
猜你喜欢
  • 2018-11-08
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 2012-09-02
  • 2020-11-12
  • 2020-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多