我想用这个签名构建一个Web服务,如果param2为空,它不会抛出异常。这可能吗?
[WebMethod]
public string HelloWorld(string param1, bool param2) { }
该异常是System.ArgumentException,它在尝试将空字符串转换为布尔值时引发。
迄今为止尚未奏效的想法:
- Web服务不允许方法重载,例如
public string HelloWorld(string param1)
{
return HelloWorld(param1, false);
}
如所建议的here:
- 使
bool
可为空。同样的异常。 - 操作WSDL,请参阅此答案
我的问题与this question有关,但唯一的答案指向WCF合约,我还没有使用过。
8条答案
按热度按时间gab6jxml1#
如果你 * 真的 * 必须完成这个任务,这里有一个***类似的技巧***,针对一个只使用原语类型作为参数的Web方法的特定情况:
pgx2nnw82#
您可以在具有MessageName属性的Web服务中拥有重载方法。这是实现重载功能的一种解决方法。
请看http://msdn.microsoft.com/en-us/library/byxd99hx%28VS.71%29.aspx
这些方法将显示为
Add2
和Add3
。41ik7eoe3#
我知道这篇文章有点老了。但是我认为Rasik中的例子的方法名应该是相同的。如果两个方法名都是相同的,那么重载就出现了。我认为应该是这样的:
de90aj5v4#
根据MinOccurs属性系结支援和预设属性系结支援:
1.实值型别(Value Type)搭配公用布林(Bool)字段,该字段使用先前在将XSD转译为来源-minOccurs value of output
<element>
element 0下所述的指定命名惯例。结果:
1.具有通过System.Component.DefaultValueAttribute指定的默认值的值类型-输出
<element>
元素0的minOccurs值。在<element>
元素中,默认值也是通过默认XML属性指定的。结果:
9rnv2umw5#
您不能重载Web服务方法。SOAP协议不支持它。Rasik的代码是解决方法。
0mkxixxg6#
将参数设为
bool?
并让调用方发送显式空值也是一种解决方法。5kgi1eie7#
这是最好的解决方案,已证明对我的工作。
只需创建一个数据类,将所有需要的参数作为属性,并将该类作为唯一的参数。这样,类的每个属性都将被可选地序列化,如果没有传入,则将是默认值。
这就是我要说的
txu3uszq8#
将所有可选参数设置为字符串。如果未传递任何参数,则将输入视为空。