2010-06-08 1 views
6

Qual è il modo migliore per creare un servizio Web che restituisca un insieme di coordinate x, y? Non sono sicuro sull'oggetto che è il miglior tipo di ritorno. Quando si consumano il servizio che voglio avere è tornato come XML preferibly qualcosa di simile, per esempio:Restituzione dei dati XML da un servizio Web

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

Se qualcuno ha una struttura migliore per tornare per favore aiutatemi Sono un tutto questo.

+0

Sei bloccato con i servizi Web ASMX? In caso contrario, dovresti utilizzare WCF. –

risposta

3

Dal momento che si sta utilizzando C#, è abbastanza facile. Il mio codice presuppone che non sia necessaria la deserializzazione, solo un codice XML da analizzare:

[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

Grazie Jesse, un'ultima cosa è un modo semplice per pubblicare il servizio web in modo da poter accedere da qualsiasi luogo? –

+0

Avere setter vuoti è akward. Come dovrebbe sapere il mondo che ignori il loro incarico? Perché non rendere le proprietà pubbliche a sola lettura invece? O ancora meglio: public int X {get; set privato;} –

+0

Per la distribuzione più semplice, è possibile eseguire una cosiddetta "distribuzione XCOPY" in cui il codice viene semplicemente copiato nella radice del sito Web e gli utenti accedono tramite http: //yoursite/service.asmx. Tuttavia, ci sono metodi più robusti all'interno di Visual Studio stesso (web precompilato, distribuito) per metterlo su un server web. Il chilometraggio del tuo ambiente può tuttavia variare. –

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

Oppure, si potrebbe andare per JSON rappresentazione invece:

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

Puoi aiutare con una firma di funzione per creare questo in un servizio web? Che tipo di restituire? una stringa di xml? O c'è un modo migliore? –

+0

Mi spiace, @Nick, ho letto male la tua domanda. Ho pensato che stavi chiedendo qual è il miglior formato di ritorno. Se avevi bisogno di un esempio di codice, @ Jesse's è buono. –