2010-06-08 49 views
6

¿Cuál es la mejor manera de crear un servicio web que devuelva un conjunto de coordenadas x, y? No estoy seguro del objeto que es el mejor tipo de devolución. Cuando se consume el servicio que desea tener que volver como XML preferibly algo como esto por ejemplo:Devolver datos XML de un servicio web

<TheData> 
    <Point> 
    <x>0</x> 
    <y>2</y> 
    </Point> 
    <Point> 
    <x>5</x> 
    <y>3</y> 
    </Point> 
</TheData> 

Si alguien tiene una mejor estructura para volver por favor ayuda Soy nuevo en todo esto.

+0

¿Está atascado con los servicios web ASMX? Si no, entonces deberías estar usando WCF. –

Respuesta

3

Puesto que usted está usando C#, que es bastante fácil. Mi código asume que no necesita deserialización, solo un XML para que un cliente lo analice:

[WebService(Namespace = "http://webservices.mycompany.com/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[ToolboxItem(false)] 
public class PointService : WebService 
{ 
    [WebMethod] 
    public Points GetPoints() 
    { 
     return new Points(new List<Point> 
     { 
      new Point(0, 2), 
      new Point(5, 3) 
     }); 
    } 
} 

[Serializable] 
public sealed class Point 
{ 
    private readonly int x; 

    private readonly int y; 

    public Point(int x, int y) 
    { 
     this.x = x; 
     this.y = y; 
    } 

    private Point() 
    { 
    } 

    [XmlAttribute] 
    public int X 
    { 
     get 
     { 
      return this.x; 
     } 

     set 
     { 
     } 
    } 

    [XmlAttribute] 
    public int Y 
    { 
     get 
     { 
      return this.y; 
     } 

     set 
     { 
     } 
    } 
} 

[Serializable] 
[XmlRoot("Points")] 
public sealed class Points 
{ 
    private readonly List<Point> points; 

    public Points(IEnumerable<Point> points) 
    { 
     this.points = new List<Point>(points); 
    } 

    private Points() 
    { 
    } 

    [XmlElement("Point")] 
    public List<Point> ThePoints 
    { 
     get 
     { 
      return this.points; 
     } 

     set 
     { 
     } 
    } 
} 
+0

Gracias Jesse, una última cosa es que hay una manera simple de publicar el servicio web para que pueda acceder desde cualquier lugar. –

+0

Tener decoradores vacíos es incómodo. ¿Cómo debería saber el mundo que simplemente ignoras su tarea? ¿Por qué no hacer las propiedades públicas de solo lectura? O incluso mejor: public int X {get; conjunto privado;} –

+0

Para la implementación más sencilla, puede hacer lo que se conoce como una "implementación XCOPY" en la que su código solo se copia en la raíz de su sitio web y los usuarios acceden a él a través de http: //yoursite/service.asmx. Sin embargo, hay métodos más robustos dentro de Visual Studio (web precompilada, implementación) para ponerlo en un servidor web. Sin embargo, el kilometraje de su entorno puede variar. –

1
<Points> <!-- alternatives: PointCollection or PointList --> 
    <Point x="0" Y="2" /> 
    <!-- ... --> 
</Points> 

O, usted podría ir para JSON representación en su lugar:

[ { x:0, y:2 }, { x:5, y:10 } ] 
+0

¿Puede ayudar con una firma de función para crear esto en un servicio web? ¿Qué tipo devolver? una cadena de xml? ¿O hay un mejor camino? –

+0

Lo sentimos, @Nick, leí mal su pregunta. Pensé que estabas preguntando cuál es el mejor formato de devolución. Si necesitabas un ejemplo de código, @ Jesse es bueno. –

Cuestiones relacionadas