use*_*422 5 xml vb.net wcf xsd wsdl
在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
Run Code Online (Sandbox Code Playgroud)
它是否正确?我很困惑,为什么它需要传递一个字符串,如果序列化说的是整数类型?
我的经验告诉我,在他们这边,即服务器,他们会将字符串转换为整数?正确?
谢谢
事实证明,这是一个令人惊讶的好问题,涉及 XSD 的一些微妙之处以及如何将其映射到 C# 或 VB.NET 等 .NET 语言。
WSDL 中的 XSD 类型为 类型xs:integer。XML 模式规范将 xs:integer 定义为 unbounded。这与 xs:int 形成对比,后者仅限于 32 位。
如果您要使用 WSDL xs:int,您会发现 WSDL 导入器将其映射到Int32.
虽然允许实现对 施加限制xs:integer,例如通过将范围设置为受机器字长(可以是任何大小)限制,但最好的做法是“在接受的内容上保持自由,在发送的内容上保持保守” ”。
由于 .NET 直到最近才具有本机BigInteger类型,因此能够发送或接收 的全范围值的唯一选择xs:intger是采用允许无限范围的数据类型,他们选择了string. 我可能更喜欢一种本身仅限于接受数字的数据类型,但有一些话要说,因为他们选择了核心数据类型。
出于不同的原因,他们将类似的方法应用于其他数据类型。例如,gYearMonth可以映射到一种DateTime类型,在发送时将其他值设置为零。但他们又选择了string。
以下是Microsoft 在导入 WSDL 时使用的映射的完整列表。
在他们这边,即服务器,他们会将字符串转换为整数?正确的?
不。它的工作原理如下(大致):