【问题标题】:Web Service Method with Optional Parameters [duplicate]具有可选参数的 Web 服务方法 [重复]
【发布时间】:2011-11-25 19:43:22
【问题描述】:

可能重复:
Can I have an optional parameter for an ASP.NET SOAP web service

我已经尝试过寻找这个,但我真的找不到我想做的正确解决方案。很抱歉重复,因为我知道以前有人问过这个问题。我有一个 Web 服务方法,我希望在其中有一个可选参数,例如:

public void MyMethod(int a, int b, int c = -3)

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

谢谢ю

【问题讨论】:

  • ASP.NET Web 服务 (asmx) 还是 WCF?
  • @steve Kiss 你找到任何解决方案了吗?
  • 我猜这不是重复的......尤其是因为答案。旧问题(2009)提到了没有重载的解决方法(可能是旧版本的 ASP.NET)。当前线程(2011)的答案表明真正的重载是可能的。

标签: c# .net web-services optional-parameters


【解决方案1】:

您可以通过重载和使用 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)

为此,您可能还需要更改

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 

[WebServiceBinding(ConformsTo = WsiProfiles.None)] 

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

【讨论】:

  • 要完成这项工作,您可能还需要像 WS-I Basic Profile v1.1 一样将 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 更改为 [WebServiceBinding(ConformsTo = WsiProfiles.None)]不允许重载
【解决方案2】:

使用方法重载:

[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)
{
}

【讨论】:

  • 如何从服务中调用它?
  • @Si8 你的意思是现在如何调用这个服务?最简单的方法是使用 Visual Studio 生成代理类
  • 我能弄明白。谢谢。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-03
    • 2012-04-16
    • 2015-05-05
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    相关资源
    最近更新 更多