2010-06-08 132 views
6

创建返回一组x,y坐标的Web服务的最佳方式是什么?我不确定是否是最佳返回类型的对象。当消费服务,我想拥有它回来为XML preferibly这样的事情,例如:从Web服务返回XML数据

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

如果有人有更好的结构返回,请帮助我新的这一切。

+0

您是否使用ASMX Web服务卡住了?如果没有,那么你应该使用WCF。 – 2010-06-08 21:02:10

回答

3

由于您使用C#,这是很容易的。我的代码假设您不需要反序列化,只需要一些XML来解析客户端:

[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

谢谢杰西,最后一件事是否有一种简单的方法来发布Web服务,以便我可以从任何地方访问? – 2010-06-08 20:52:53

+0

有空的二传手是有问题的。世界应该如何知道你忽略了他们的任务?为什么不让公共财产只读?或者甚至更好:public int X {get; private set;} – 2010-06-08 20:57:20

+0

为了实现最简单的部署,您可以执行所谓的“XCOPY部署”,您的代码只需复制到您的网站根目录下,用户可以通过http://yoursite/service.asmx访问它。但是,Visual Studio本身(预编译的Web,部署)中有更多健壮的方法将其放到Web服务器上。虽然您的环境里程可能会有所不同。 – 2010-06-08 20:59:02

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

或者,你可以去JSON表示代替:

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

你可以帮助一个函数签名在Web服务中创建它吗?什么类型返回?一串xml?或者,还有更好的方法? – 2010-06-08 20:27:03

+0

对不起,@尼克,我误解了你的问题。我以为你在问什么是最好的回报格式。如果你需要一个代码示例,@ Jesse's是一个很好的例子。 – 2010-06-08 21:54:25