【发布时间】: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