具有可选参数的Web服务方法

Ste*_*iss 26 .net c# web-services optional-parameters

可能重复:
我是否可以为ASP.NET SOAP Web服务提供可选参数

我试过四处寻找,但我真的找不到合适的解决方案.很抱歉重复,因为我知道之前有人问过这个问题.我有一个Web服务方法,我想在其中有一个可选参数,例如:

public void MyMethod(int a, int b, int c = -3)
Run Code Online (Sandbox Code Playgroud)

我已经知道我不能使用可空参数,所以我只想尝试使用默认值.问题是,当我调用此方法而不提供参数时,c仍然会获得异常.有什么地方我必须指定它实际上是可选的吗?

Thanksю

小智 26

您可以通过重载和使用MessageName属性来实现可选参数.

[WebMethod(MessageName = "MyMethodDefault")]
public void MyMethod(int a, int b)
{
      MyMethod( a, b, -3);
}

[WebMethod(MessageName = "MyMethod")]
public void MyMethod(int a, int b, int c)
Run Code Online (Sandbox Code Playgroud)

为此,您可能还需要更改

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
Run Code Online (Sandbox Code Playgroud)

[WebServiceBinding(ConformsTo = WsiProfiles.None)] 
Run Code Online (Sandbox Code Playgroud)

如果你还没有这样做,因为WS-I Basic Profile v1.1不允许超载

  • 为了使这项工作,您可能还需要将[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]更改为[WebServiceBinding(ConformsTo = WsiProfiles.None)],因为WS-I Basic Profile v1.1不允许重载 (6认同)

aba*_*hev 10

使用方法重载:

[WebMethod(MessageName = "MyMethod1")]
public void MyMethod(int a, int b)
{
    return MyMethod(a, b, -3);
}

[WebMethod(MessageName = "MyMethod2")]
public void MyMethod(int a, int b, int c)
{
}
Run Code Online (Sandbox Code Playgroud)


小智 3

我之前研究过可选参数等,并且直接的 asmx Web 服务不支持这一点(使用默认生成的 WSDL)。但是,使用 WCF,您可以将数据契约中的参数标记为 IsRequired=false - 请参阅ASP.NET Web 服务中的可选参数