Как испустить пустой XML для метода [WebGet] в WCF?

Преобразуемые атрибуты - это правильный способ сохранения иным образом неподдерживаемых значений объекта в Базовых данных (например, NSArray). Из Базового руководства по программированию данных: нестандартные постоянные атрибуты :

Идея трансформируемых атрибутов состоит в том, что вы обращаетесь к атрибуту как нестандартному типу, но за кадром Core Data использует экземпляр NSValueTransformer для преобразования атрибута в экземпляр NSData и из него. Базовые данные затем сохраняют экземпляр данных в постоянном хранилище.

Преобразуемый атрибут использует NSValueTransformer для хранения иного неподдерживаемого объекта в постоянном хранилище. Это позволяет Core Data хранить практически все, что может быть представлено как NSData - что может быть очень полезно. К сожалению, трансформируемые атрибуты не могут быть сопоставлены в предикате или использованы при сортировке результатов с помощью NSSQLiteStoreType. Это означает, что трансформируемые атрибуты полезны только для хранения, а не для обнаружения объектов.

Преобразователь по умолчанию позволяет любому объекту, который поддерживает NSCoding (или NSSecureCoding), быть сохранен как преобразуемый атрибут. Это включает в себя NSArray, UIColor, UIImage, NSURL, CLLocation и многие другие. Не рекомендуется использовать это для данных, которые могут быть произвольно большими, так как это может оказать значительное влияние на производительность при запросе хранилища. Изображения, например, плохо подходят для трансформируемых атрибутов - это большие пакеты байтов, которые фрагментируют хранилище. В этом случае лучше использовать возможности хранения внешних записей Core Data или хранить данные отдельно в виде файла и сохранять URL-адрес файла в Core Data. Если вам необходимо сохранить UIImage в Базовых данных, убедитесь, что вы знаете, какие компромиссы у вас есть.

Создать преобразуемый атрибут очень просто:

• В редакторе модели данных ядра Xcode выберите атрибут модели, который вы хотите изменить. В инспекторе справа установите тип атрибута как «Трансформируемый». Вы можете оставить поле «Имя» пустым, чтобы использовать преобразователь по умолчанию. Если бы вы использовали собственный преобразователь, вы бы ввели здесь имя класса и зарегистрировали класс, используя +[NSValueTransformer setValueTransformer:forName:] где-то в вашем коде.

Core Data Model Editor Transformable Attribute

• В заголовке подкласса NSManagedObject объявите свойство, которое описывает преобразуемый атрибут с правильным типом. В этом случае мы используем NSArray:

@property (nonatomic, retain) NSArray *transformedArray;

• В файле реализации подкласса NSManagedObject свойство должно быть динамическим:

@dynamic transformedArray;

И все готово. Когда объект значения NSArray передается в setTransformedArray:, этот массив сохраняется объектом. Когда контекст сохранен, Core Data преобразует NSArray в NSData, используя NSValueTransformer, описанный в модели. NSData байтов будут сохранены в постоянном хранилище.

10
задан Cheeso 1 June 2009 в 18:38
поделиться

1 ответ

Верните XmlElement. Вам не нужен IXmlSerializable. Ты не не нужен класс-оболочка.

пример интерфейса службы:

namespace Cheeso.Samples.Webservices._2009Jun01
{
    [ServiceContract(Namespace="urn:Cheeso.Samples.Webservices" )]
    public interface IWebGetService
    {
        [OperationContract]
        [WebGet(
                BodyStyle = WebMessageBodyStyle.Bare,
                    RequestFormat = WebMessageFormat.Xml,
                    ResponseFormat = WebMessageFormat.Xml,
                    UriTemplate = "/Greet/{greeting}")]
        XmlElement Greet(String greeting);
    }
}

реализация службы:

namespace Cheeso.Samples.Webservices._2009Jun01
{
    [ServiceBehavior(Name="WcfWebGetService",
                     Namespace="urn:Cheeso.Samples.WebServices",
                     IncludeExceptionDetailInFaults=true)]

    public class WcfWebGetService : IWebGetService
    {
        public XmlElement Greet (String greeting)
        {
            string rawXml = "<p>Stuff here</p>";
            XmlDocument doc = new XmlDocument();
            doc.Load(new System.IO.StringReader(rawXml));
            return doc.DocumentElement;
        }
    }
}

См. также этот аналогичный вопрос, но без поворота WebGet:
serializing-generic-xml-data-through-wcf- веб-сервис-запросы .

8
ответ дан 4 December 2019 в 02:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: