validator validate validar probar net con check xml vb.net wcf xsd wsdl

xml - validate - wsdl xsd validator



¿Por qué Microsoft une un XSD xs: entero a una cadena cuando se importa WSDL? (1)

Mirando el WDSL en un servicio web. el xml indica que el tipo de datos es un entero, sin embargo, cuando se llama al método web, el método espera una cadena, código WDSL a continuación

<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

¿Es esto correcto? Estoy confundido de por qué requiere que se pase una cadena si la serialización dice el tipo en un número entero.

Mi experiencia me está diciendo que por su lado, es decir, el servidor, ¿que van a convertir la cadena en un número entero? ¿correcto?

Gracias


Esta resulta ser una pregunta sorprendentemente buena que toca algunas sutilezas de XSD y cómo se puede asignar a un lenguaje .NET como C # o VB.NET.

El tipo XSD en su WSDL es de tipo xs:integer . La especificación del Esquema XML define xs: entero como ilimitado . Esto en contraste con xs: int, que está limitado a 32 bits .

Si su WSDL fuera a usar xs:int lugar, encontraría al importador WSDL para Int32 a un Int32 .

Mientras que las implementaciones pueden imponer restricciones en xs:integer , por ejemplo, estableciendo que el rango esté limitado por el tamaño de palabra de una máquina (que puede ser de cualquier tamaño ), es una buena práctica "Ser liberal en lo que acepta y conservador en lo que envía " .

Como .NET no tenía un tipo de BigInteger nativo hasta hace poco, la única opción para poder enviar o recibir el rango completo de valores de xs:intger es tomar un tipo de datos que permita rangos ilimitados y xs:intger una string . Es posible que haya preferido un tipo de datos que en sí mismo está limitado a aceptar solo dígitos, pero hay algo que decir por el hecho de que eligieron un tipo de datos central.

Aplican métodos similares a otros tipos de datos, por diferentes razones. Por ejemplo, gYearMonth podría haber sido asignado a un tipo de fecha y hora, estableciendo los otros valores a cero al enviar. Pero de nuevo eligieron la string .

Aquí hay una lista completa de las asignaciones que usa Microsoft al importar WSDL.

de su lado, es decir, el servidor, ¿convertirán la secuencia en un número entero? ¿correcto?

No. Funciona de la siguiente manera (aproximadamente):

  • Su tipo de datos se valida contra las facetas del tipo, esto sucede de su lado, por lo que no podrá enviar un valor de "john"
  • Después de la validación, los tipos se serializan utilizando el protocolo SOAP
  • Los datos se envían por el cable
  • Los datos se reciben por cualquier sistema que utilicen que también comprenda el protocolo SOAP
  • Los datos se validan contra el esquema
  • Los datos se deserializan en cualquier tipo que los programadores del otro lado consideren conveniente, dependiendo de las herramientas o si manipularon el mapeo a mano. Si usaban WCF, esto sería una cadena nuevamente, a menos que cambiaran los valores predeterminados.
  • Los datos se validan contra la lógica de negocios (si corresponde)
  • La lógica de negocios se ejecuta
  • .... algunos otros pasos y finalmente se envía la respuesta SOAP