C# 在C中使用可选参数从web引用调用WebMethod#

C# 在C中使用可选参数从web引用调用WebMethod#,c#,web-services,asmx,optional-parameters,C#,Web Services,Asmx,Optional Parameters,我使用.NETWebServices创建了一个带有2个可选参数的虚拟web服务,但是在实际产品中,我们将有更多可选参数(想想:查询过滤器)。问题是在调用webservice时不可能省略可选参数,这意味着在针对真实webservice开发时,每次调用webservice时都可能会有几十个空值 目前,此虚拟Web服务仅包含以下内容,以支持2个可选字符串参数: [WebMethod] public string HelloWorld(String PARAM_1="", String PARAM_2=

我使用.NETWebServices创建了一个带有2个可选参数的虚拟web服务,但是在实际产品中,我们将有更多可选参数(想想:查询过滤器)。问题是在调用webservice时不可能省略可选参数,这意味着在针对真实webservice开发时,每次调用webservice时都可能会有几十个空值

目前,此虚拟Web服务仅包含以下内容,以支持2个可选字符串参数:

[WebMethod]
public string HelloWorld(String PARAM_1="", String PARAM_2="")
{   return "";   }
在WSDL中,它确实使用minvalue 0和maxvalue 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"/>

有没有一种方法可以在VS2010中使用带有可选参数的webservices,而不必在每次调用时强制为数十个可选参数设置空值?我们希望继续在Visual Studio中使用方便的webreferences,而不必一直这样做。

可选参数是特定于语言的构造。基于SOAP的web服务对可选参数一无所知,因为基于SOAP的web服务与语言无关


如果您想为服务调用提供一个可选参数,那么如果您想让客户端感觉到可选参数,就需要用自己的代码覆盖生成的存根方法。

我想重构方法以接受具有十几个可为空属性(而不是十几个参数)的结构会很有意义

minOccurs=0表示变量的发生。由于其类型为字符串minOccurs=0,因为它将具有默认值


您可以尝试使用不同类型的可选参数并检查wsdl。

如果将所有参数包装在单独的类中,您可以创建可选参数。这表示一条新消息,您可以自行决定将某些属性设置为可选。您还可以在部分类声明中为服务生成的类提供不同的构造函数


这是一个比方法重载更好的解决方案,方法重载甚至不适用于web服务。您必须为每个重载创建一个新的稍微不同的方法。

这不是问题的解决方案,但是为什么不使用服务引用而不是Web引用呢?Web引用是一种遗留技术,不应用于新代码。请参阅
public string HelloWorld(string PARAM_1, string PARAM_2) {
object[] results = this.Invoke("HelloWorld", new object[] { PARAM_1, PARAM_2});