我使用 .Net Webservices 创建了一个带有 2 个可选参数的虚拟 Web 服务,但是在实际产品中,我们将有更多可选参数(想想:查询过滤器)。问题在于,在调用 Web 服务时不可能省略可选参数,这意味着在针对实际 Web 服务进行开发时,每次调用 Web 服务时都可能存在数十个 NULL 值。
现在这个虚拟 Web 服务仅包含以下内容,以支持 2 个可选字符串参数:
[WebMethod]
public string HelloWorld(String PARAM_1="", String PARAM_2="")
{ return ""; }
在 WSDL 中,它确实显示了这些参数,最小值为 0,最大值为 1:
<s:element minOccurs="0" maxOccurs="1" name="PARAM_1" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="PARAM_2" type="s:string"/>
问题在于:当通过 Visual Studio 2010 中的 Web 引用添加此 Web 服务时,它确实会使用 HelloWorld 方法创建服务对象。但是它没有考虑可选参数。它创建一个没有可选参数的函数 HelloWorld。它总是需要 PARAM_1 和 PARAM_2,因此无论我们实际想要使用哪个参数,可选参数都必须填充 NULL。
VS2010 从 Web 参考中生成的定义是这样的,显示了问题:
public string HelloWorld(string PARAM_1, string PARAM_2) {
object[] results = this.Invoke("HelloWorld", new object[] { PARAM_1, PARAM_2});
有没有一种方法可以在 VS2010 中使用带有可选参数的 Web 服务,而不必在每次调用时强制将潜在的数十个可选参数设为 NULL?我们希望继续使用 Visual Studio 中方便的网络引用,而不是一直被迫这样做。