带或不带参数的WebMethod调用

时间:2019-06-04 10:05:20

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

我要做的是设置通过IIS公开的WCF Web服务,该服务具有一种称为GetArticle的方法。必须使用一些强制性参数(例如userNamepassword以及其他可选参数(例如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(用户名,密码,品牌)。

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

[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相关的问题,但是对我来说根本没有任何解决方案似乎很奇怪...

预先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在您描述的HTTP GET查询中传递凭据是一个糟糕的主意,这是非常不安全的,应该避免。

在任何情况下,您都不能使用可选参数,WebMethod需要特定的签名...因此,您需要使用默认参数...即。 public void GetArticle(string userName, string password, string brand="")