2010-06-08 4 views
6

Quelle est la meilleure façon de créer un service Web renvoyant un ensemble de coordonnées x, y? Je ne suis pas sûr sur l'objet qui est le meilleur type de retour. Lors de la consommation du service que je veux l'avoir revenir au format XML preferibly quelque chose comme ceci par exemple:Renvoyer des données XML à partir d'un service Web

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

Si quelqu'un a une meilleure structure pour revenir s'il vous plaît aider Je suis nouveau à tout cela.

+0

Êtes-vous bloqué en utilisant les services Web ASMX? Si non, alors vous devriez utiliser WCF. –

Répondre

3

Puisque vous utilisez C#, il est assez facile. Mon code suppose que vous n'avez pas besoin de désérialisation, juste du code XML pour un client à analyser:

[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

Merci Jesse, une dernière chose est-il un moyen simple de publier le service Web afin que je puisse accéder à partir de n'importe où? –

+0

Avoir des setters vides est akward. Comment le monde devrait-il savoir que vous ignorez leur mission? Pourquoi ne pas rendre les propriétés publiques en lecture seule? Ou encore mieux: public int X {get; jeu privé;} –

+0

Pour le déploiement le plus simple, vous pouvez effectuer ce que l'on appelle un "déploiement XCOPY" dans lequel votre code est copié sous la racine de votre site Web et les utilisateurs y accèdent via http: //votresite/service.asmx. Cependant, il existe des méthodes plus robustes dans Visual Studio lui-même (précompilé web, déployer) pour le mettre sur un serveur web. Le kilométrage de votre environnement peut cependant varier. –

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

Ou, vous pouvez aller à la place représentation JSON:

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

Pouvez-vous aider avec une signature de fonction pour créer ceci dans un service Web? Quel type de retour? une chaîne de xml? Ou y a-t-il un meilleur moyen? –

+0

Désolé, @Nick, j'ai mal lu votre question. Je pensais que vous demandiez quel est le meilleur format de retour. Si vous aviez besoin d'un exemple de code, @ Jesse's est un bon exemple. –

Questions connexes