Как объявить сложный вложенный тип C # для веб-службы - PullRequest
1 голос
/ 29 октября 2009

Я хотел бы создать сервис, который принимает сложный вложенный тип. В образце файла asmx, который я создал:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
// [System.Web.Script.Services.ScriptService]
public class ServiceNest : System.Web.Services.WebService
{
   public class Block
   {
      [XmlElement(IsNullable = false)]
      public int number;
   }

   public class Cell
   {
      [XmlElement(IsNullable = false)]
      public Block block;
   }

   public class Head
   {
      [XmlElement(IsNullable = false)]
      public Cell cell;
   }

   public class Nest
   {
      public Head head;
   }

   [WebMethod]
   public void TakeNest(Nest nest)
   {
   }

}

Когда я просматриваю файл asmx в IE, на тестовой странице показывается пример запроса SOAP post:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <TakeNest xmlns="http://schemas.intellicorp.com/livecompare/">
      <nest>
        <head>
          <cell>
            <block xsi:nil="true" />
          </cell>
        </head>
      </nest>
    </TakeNest>
  </soap:Body>
</soap:Envelope>

Он не расширил до своего числового члена.

Глядя на WSDL, все типы выглядят хорошо. Так это всего лишь ограничение создателя пост демо-страницы?

Спасибо.

Ответы [ 3 ]

1 голос
/ 29 октября 2009

Но эти элементы ARE null. Вам нужно создать их, прежде чем они появятся, иначе они просто будут нулевыми.

0 голосов
/ 07 июня 2010

Код .NET не сдавался после определенного количества уровней.

Если вы посмотрите на код, сгенерированный «Добавить веб-ссылку», то обнаружите, что есть поле bool numberSpecified. Только если клиент установит это значение на true, номер будет сериализован.

Если вы посмотрите на схему XML, вы увидите, что элемент number может отсутствовать. Если бы он имел ссылочный тип, то он мог бы быть представлен в клиенте значением null. Поскольку это int, этот дополнительный флаг необходим для указания, следует ли сериализовать это необязательное значение.

0 голосов
/ 30 октября 2009

Как указал Кевин, пример POST XML указывает, что эти элементы равны нулю. Я должен был просто попытаться использовать веб-сервис. Как только я это сделал, я увидел, что импортер (.NET, Java или Ruby) правильно создал все типы. Так что на самом деле здесь нет вопроса.

...