我在使用非常基本的Web服务开发时遇到了一种奇怪的行为。这个问题可能是愚蠢的,但我认为有人能够解释这一观察结果。
我正在使用Web方法MyWebMethod开发Web服务
MyWebMethod(MyEnum Param, .....)
其中,
public enum MyEnum : int
{
Type_1 =1;
Type_2 =2;
Type_3 =3;
}
现在我正在使用我的客户端与此服务进行通信,但对于每种请求类型,Type_1,Type_2等服务都会将其捕获为Type_1。例如,如果我在Web服务中的MyWebMethod上创建了一个断点,我将Type_1视为param1类型。我猜这是Namespacing的一个问题。我在代码上看不到任何其他缺陷。任何基于经验的想法?
答案 0 :(得分:2)
当enum被序列化时,只有它的字符串表示通过wire(名称)传输,而不是值。我相信这就是你得到错误价值的原因。
查看这2篇文章了解更多信息
答案 1 :(得分:0)
如果这是一个WCF Web服务和一个用wsdl.exe
为方法签名中的每个值类型生成的.NET 2.0客户端,则会添加一个名为XXXSpecified
的布尔参数,您需要将其设置为true
。有关详细信息,请查看此blog post。
答案 2 :(得分:0)
我猜你的枚举不需要从int继承。您在枚举中提供名称和值,这应该足够了。我假设您的所有代码都是.NET 2.0。作为测试,从Web服务返回枚举值。只是为了确保XML序列化在浏览器直接命中服务时按预期工作。