2010-06-08 2 views
6

Каков наилучший способ создания веб-службы, которая возвращает набор координат x, y? Я не уверен в объекте, который является лучшим возвращаемым типом. При потреблении службы я хочу, чтобы он вернулся, как XML preferibly что-то вроде этого, например:Возврат данных XML из веб-службы

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

Если кто-то имеет лучшую структуру, чтобы вернуться, пожалуйста, помогите я новичок на все это.

+0

Вы застряли, используя веб-службы ASMX? Если нет, то вы должны использовать WCF. –

ответ

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

Спасибо Джесси, последнее, что есть простой способ опубликовать веб-сервис, чтобы я мог получить доступ из любого места? –

+0

У вас есть пустые сеттеры. Как мир должен знать, что вы просто игнорируете их назначение? Почему бы не сделать общедоступные свойства readonly вместо этого? Или еще лучше: public int X {get; private set;} –

+0

Для простого развертывания вы можете использовать так называемое «развертывание XCOPY», в котором ваш код просто копируется под корень вашего сайта, а пользователи получают доступ к нему через http: //yoursite/service.asmx. Тем не менее, в Visual Studio есть более надежные методы (предварительно скомпилированные веб-страницы, развертывание), чтобы разместить их на веб-сервере. Однако пробег вашей среды может измениться. –

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

Или вы могли бы пойти на JSON представления вместо:

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

Можете ли вы помочь с сигнатурой функции, чтобы создать это в веб-службе? Какой тип возврата? строка xml? Или есть лучший способ? –

+0

Извините, @ Ник, я неправильно прочитал ваш вопрос. Я думал, вы спрашиваете, какой лучший формат возвращения. Если вам нужен пример кода, @ Jesse's является хорошим. –

Смежные вопросы