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