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

时间:2009-11-12 15:29:25

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

我想使用此签名构建一个web服务,如果param2保留为空,则不会抛出异常。这可能吗?

[WebMethod]
public string HelloWorld(string param1, bool param2) { }

异常是在尝试将空字符串转换为布尔值时抛出的System.ArgumentException。

到目前为止尚无效的想法:

  • 不允许对Web服务进行方法重载,例如

    public string HelloWorld(string param1)
    {
        return HelloWorld(param1, false);
    }
    

建议here

  • 使bool可以为空bool?。同样的例外。
  • 操纵WSDL,请参阅this answer

我的问题与this question有关,但唯一的答案是WCF合同,我还没有使用过。

7 个答案:

答案 0 :(得分:13)

您可以在具有MessageName属性的webservices中使用重载方法。这是实现重载功能的解决方法。

查看http://msdn.microsoft.com/en-us/library/byxd99hx%28VS.71%29.aspx

[WebMethod(MessageName="Add3")]
public double Add(double dValueOne, double dValueTwo, double dValueThree)
{
   return dValueOne + dValueTwo + dValueThree;
}

[WebMethod(MessageName="Add2")]
public int Add(double dValueOne, double dValueTwo)
{
   return dValueOne + dValueTwo;
}

这些方法将以Add2Add3显示在外面。

答案 1 :(得分:12)

如果您真的必须完成此操作,那么对于仅具有基本类型的Web方法的特定情况,这里是 类型的hack 作为参数:

[WebMethod]
public void MyMethod(double requiredParam1, int requiredParam2)
{
    // Grab an optional param from the request.
    string optionalParam1 = this.Context.Request["optionalParam1"];

    // Grab another optional param from the request, this time a double.
    double optionalParam2;
    double.TryParse(this.Context.Request["optionalParam2"], out optionalParam2);
    ...
}

答案 2 :(得分:7)

我知道这篇文章有点旧。但我认为方法名称对于Rasik的示例应该是相同的。如果两个方法名称相同,那么重载就在那里。我认为它应该是这样的..

[WebMethod(MessageName="Add3")]
**public double Add(double dValueOne, double dValueTwo, double dValueThree)**
{
   return dValueOne + dValueTwo + dValueThree;
}

[WebMethod(MessageName="Add2")]
**public int Add(double dValueOne, double dValueTwo)**
{
   return dValueOne + dValueTwo;
}

答案 3 :(得分:1)

您不能重载Web服务方法。 SOAP协议不支持它。 Rasik的代码就是解决方法。

答案 4 :(得分:1)

制作所有可选参数字符串。如果没有传递参数,则将输入视为null。

答案 5 :(得分:1)

使您的参数 bool? 并让您的调用者发送一个显式 null 也可以作为一种解决方法。

答案 6 :(得分:0)

根据MinOccurs Attribute Binding SupportDefault Attribute Binding Support

  1. 值类型伴随公共bool字段,该字段使用前面在将XSD转换为源 - 源输出<element>元素0的minOccurs值时所述的指定命名约定。

    [WebMethod]
    public SomeResult SomeMethod(bool optionalParam, [XmlIgnore] bool optionalParamSpecified)
    结果:
    <s:element minOccurs="0" maxOccurs="1" name="optionalParam" type="s:boolean" />

  2. 通过System.Component.DefaultValueAttribute指定的默认值的值类型 - 输出<s:element minOccurs="0" maxOccurs="1" name="optionalParam" type="s:boolean" />元素0的minOccurs值。在<element>元素中,默认值也通过默认的XML属性。

    <element>
    结果:
    [WebMethod]
    public SomeResult SomeMethod([DefaultValue(true)] bool optionalParam)