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

Hau*_*uke 15 .net c# asp.net web-services optional-parameters

我想用这个签名构建一个web服务,如果param2留空,它不会抛出异常.这可能吗?

[WebMethod]
public string HelloWorld(string param1, bool param2) { }
Run Code Online (Sandbox Code Playgroud)

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

到目前为止没有奏效的想法:

如建议在这里:

  • 使bool可空的bool?.同样的例外.
  • 操纵WSDL,看到这个答案

我的问题与这个问题有关,但唯一的答案是WCF合同,我还没有使用过.

Ras*_*ain 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;
}
Run Code Online (Sandbox Code Playgroud)

该方法将在可见的Add2Add3到外面.


Die*_*ego 12

如果你真的必须完成这个,那么对于只有基本类型作为参数的web方法的特定情况,这是一种破解:

[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);
    ...
}
Run Code Online (Sandbox Code Playgroud)


Jal*_*eel 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;
}
Run Code Online (Sandbox Code Playgroud)