xml – 为什么Microsoft在导入WSDL时将XSD xs:integer与字符串匹配?

在webservice上查看WDSL. xml声明数据类型是一个整数,但是,在调用web方法时,该方法需要一个字符串,WDSL代码如下

<System.Xml.Serialization.XmlElementAttribute(Form:=System.Xml.Schema.XmlSchemaForm.Unqualified,DataType:="integer",Order:=0)> _

Public Property ID() As String
    Get
        Return Me.ID
    End Get
    Set(value As String)
        Me.ID= value
    End Set
End Property

它是否正确?我很困惑,为什么它需要传递一个字符串,如果序列化说的是整数类型?

我的经验告诉我,在他们这边,即服务器,他们会将字符串转换为整数?正确?

谢谢

解决方法

事实证明这是一个令人惊讶的好问题,涉及XSD的一些细微之处以及它如何映射到.NET语言,如C#或VB.NET.

WSDL中的XSD类型是xs:integer类型. XML Schema规范defines xs:integer as unbounded.这与xs:int,which is bounded to 32 bit相反.

如果你的WSDL使用xs:int,你会发现WSDL导入器将它映射到Int32.

虽然允许实现对xs:integer施加限制,例如通过将范围设置为受机器字大小(can be any size)限制,但最好是“Be liberal in what you accept,and conservative in what you send”.

由于.NET直到最近才有本机BigInteger类型,因此能够发送或接收xs:intger的全部值的唯一选择是采用允许无限范围的数据类型并选择字符串.我可能更喜欢一种数据类型,它本身仅限于接受数字,但是他们选择核心数据类型的事实可以说明一些.

由于不同的原因,它们将类似的方法应用于其他数据类型.例如,gYearMonth可能已映射到DateTime类型,在发送时将其他值设置为零.但他们又选择了字符串.

这是Microsoft在导入WSDL时使用的full list of the mappings.

on their side i.e. server,they will cast the string into an integer? correct?

不.它的工作方式如下(粗略地):

>您的数据类型将根据类型的方面进行验证,这发生在您身边,因此您将无法发送值“john”>验证后,使用SOAP协议序列化类型>数据通过电线发送>数据由他们使用的任何系统接收,并且也理解SOAP协议>数据根据模式进行验证>根据工具或他们是否手动操作映射,数据在任何类型的程序员发现方便的情况下被反序列化.如果他们使用了WCF,那么这将是一个字符串,除非他们更改了认值.>数据根据业务逻辑进行验证(如果有)>执行业务逻辑> ….其他一些步骤,最后发送SOAP响应

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念