Создание XML на лету (память) в ASP.NET и отображение в браузере - PullRequest
0 голосов
/ 18 августа 2011

Я пытаюсь создать API XML, который имеет данные, поступающие из базы данных MySQL. Я пытаюсь получить что-то вроде ниже.

<api xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <key>eee83d24-906b-4736-91d9-1031621b79eb</key>
    <name>API Test</name>
    <feedState>Test</feedState>
    <news href="http://api.mydomain.com/eee83d24-906b-4736-91d9-1031621b79eb/news/"/>
    <comments href="http://api.mydomain.com/eee83d24-906b-4736-91d9-1031621b79eb/comments/"/>
</api>

Я могу увидеть приведенный выше XML, если открою свой браузер и наберу следующий URL

http://api.mydomain.com/eee83d24-906b-4736-91d9-1031621b79eb

Теперь, если мне нужно увидеть подробности в «новостях», я просто укажу свой браузер на:

http://api.mydomain.com/eee83d24-906b-4736-91d9-1031621b79eb/news 

После этого я увижу что-то вроде

<news xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" state="Trial">
 <newsListItem href="http://api.mydomain.com/eee83d24-906b-4736-91d9-1031621b79eb/news/800577419/">
   <id>800577419</id>
   <publishDate>2011-08-17</publishDate>
   <lastModifiedDate>2011-08-17</lastModifiedDate>
   <headline>Google buys Motorola</headline>
</newsListItem>
<newsListItem href="http://api.mydomain.com/eee83d24-906b-4736-91d9-1031621b79eb/news/800577416/">
   <id>800577416</id>
   <publishDate>2011-08-17T15:13:12</publishDate>
   <lastModifiedDate>2011-08-17T15:14:36</lastModifiedDate>
   <headline>Apple Macbook Air</headline>
 </newsListItem>
</news>

Помните, что все приведенные выше данные взяты из базы данных MySQL.

Как я могу достичь вышеуказанного? Любые примеры образцов, идеи приветствуются. Я был бы признателен, если кто-то может пролить свет. WCF - это путь? или используя старый добрый ASP.NET XDoc и т. д. ...?

Пожалуйста, сообщите. Спасибо за тонну!

1 Ответ

0 голосов
/ 21 августа 2011

Вы можете использовать службу REST WCF и легко возвращать свой XML.Просто создайте проект, используя шаблон проекта Visual Studio, найденный здесь .Если у вас уже определены классы, которые считывают данные из базы данных MySQL, вы можете вернуть их и сделать так, чтобы WCF их сериализовал для вас.Таким образом, вам не нужно использовать XDoc / XElement для сборки XML.Метод и класс обслуживания будут выглядеть примерно так:

[ServiceContract]
[XmlSerializerFormat]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Single)]
public class APIService
{
  [WebGet(UriTemplate = "{key}", ResponseFormat = WebMessageFormat.Xml)]
  public APIData GetAPIData(string key)
  {
    // build apiData object from DB using "key"
    return apiData
  }

  [WebGet(UriTemplate = "{key}/news", ResponseFormat = WebMessageFormat.Xml)]
  public APINewsData GetAPINewsData(string key)
  {
    // build apiNewsData object from DB using "key"
    return apiNewsData
  }


}

Если вы используете класс XmlSerializer (указав атрибут [xmlSerializerFormat], как указано выше) вместо класса DataContractSerializer (сериализатор WCF по умолчанию), вы можете больше контролировать, какобратный XML выглядит.Но это медленнее, чем вариант по умолчанию.Подробнее: http://msdn.microsoft.com/en-us/library/ms733901.aspx

...