在Web服务中,经常需要将一些方法暴露给外界使用。这些方法被称为WebMethods。除了WebMethods之外,Web服务还可以拥有其他普通方法,就像任何其他类一样。由于Web服务本质上是一个类,它可以利用面向对象编程(OO)的所有特性,比如方法重载。但是,要在WebMethods上使用这个特性,需要做一些额外的工作,本文将对此进行解释。
让创建一个简单的Web服务,它包含以下重载的方法:
public int AddNumbers(int a, int b)
public int AddNumbers(int a, int b, int c)
public decimal AddNumbers(decimal a, decimal b)
这三个方法都返回添加后的数值,只是数值类型不同。现在,将这些方法标记为WebMethods。为了实现这一点,需要将[WebMethod]属性应用于公共方法。
[WebMethod]
public int AddNumbers(int a, int b) {
return a+b;
}
[WebMethod]
public int AddNumbers(int a, int b, int c) {
return a+b+c;
}
[WebMethod]
public decimal AddNumbers(decimal a, decimal b) {
return a+b;
}
这样编译是没有问题的。但是,如果在浏览器中运行这个Web服务,会得到一个错误,提示AddNumbers()方法使用了相同的消息名称'AddNumbers',并建议使用WebMethod的MessageName属性来解决这个问题。
按照以下方式添加MessageName属性到WebMethod属性中:
[WebMethod]
public int AddNumbers(int a, int b) {
return "a+b";
}
[WebMethod (MessageName="AddThreeNumbers")]
public int AddNumbers(int a, int b, int c) {
return a + b + c;
}
[WebMethod (MessageName="AddDecimal")]
public decimal AddNumbers(decimal a, decimal b) {
return a+b;
}
现在重新编译Web服务,并在浏览器中运行。可以看到,第一个方法显示为AddNumbers,而对于第二和第三个方法,通过设置MessageName属性的别名显示出来。