Ant*_*haw 8 c# enums wsdl web-services
我有一个Web服务,我通过枚举
public enum QueryType {
Inquiry = 1
Maintainence = 2
}
Run Code Online (Sandbox Code Playgroud)
当我传递一个参数为QueryType的对象时,我从Web服务中得到错误:
'2'不是QueryType的有效值
当你可以从枚举的声明中清楚地看到它是.
我无法更改枚举的值,因为遗留应用程序使用这些值,但我宁愿不必插入"默认"值来推送枚举的索引以使其与我的Web服务一起使用.它就像Web服务使用值的索引而不是值本身.
有没有人建议我能做些什么来使它工作,我的WSDL中有什么可以改变的吗?
我假设您正在使用asmx Web服务来获得此答案.
您的猜测是正确的 - XML Serializer使用WSDL中的枚举名称而不是值.
如果你看一下你的WSDL,它看起来像这样:
<s:simpleType name="QueryType">
<s:restriction base="s:string">
<s:enumeration value="Inquiry" />
<s:enumeration value="Maintainence" />
</s:restriction>
</s:simpleType>
Run Code Online (Sandbox Code Playgroud)
因此,当您调用服务时,它期望一个字符串,该字符串是枚举成员的名称.使用.NET代理时,通常会为您处理此转换.如果将值传递给无法反序列化为枚举值的服务,您将收到您正在看到的消息.
要解决此问题,您可以确保向其发送预期值,或者,如果这对您不起作用,您可以告诉XML Serializer您要使用哪些值.您可以使用XmlEnum属性执行此操作:
public enum QueryType
{
[XmlEnum("1")]
Inquiry = 1,
[XmlEnum("2")]
Maintainence = 2
}
Run Code Online (Sandbox Code Playgroud)
这将生成以下模式片段(来自WSDL):
<s:simpleType name="QueryType">
<s:restriction base="s:string">
<s:enumeration value="1" />
<s:enumeration value="2" />
</s:restriction>
</s:simpleType>
Run Code Online (Sandbox Code Playgroud)
然后,如果您将值"2"传递给服务,那么它应该被正确反序列化,但是您将失去枚举值的含义.