У нас есть SOAP-реализации наших сервисов, и до сих пор у нас был некоторый устаревший код, который упаковывал наши аргументы и возвращался в другой объект, чтобы обойти некоторые сериализации / обобщения для методов RPC.
После оптимизации мы реализовали этот класс так, чтобы он сериализовал Json (DataContractJsonSerializer) и GZipped наши сложные параметры запроса и объекты ответа.
Теперь я хочу поместить этот материал в стек WCF. Что я действительно хочу, так это возможность кодировать тело сообщения как GZipped Json в стандартном сервисе SOAP. Нам нужна поддержка транзакций, безопасность и т. Д., Поэтому мы должны иметь возможность поддерживать стандартные привязки.
Мне удалось реализовать сериализацию «Поведение операций для Json», чтобы инфо-набор сообщений содержал json-совместимый XML. Затем я хотел добавить MessageEncoder, чтобы превратить xml в json в теле сообщения. Здесь у меня есть проблемы. Я не могу сериализовать все сообщение, так как у нас все еще есть стандартные мыльные заголовки и т. Д., А s: body все еще содержит корневой объект Request или Response до json-совместимого xml. Я полагаю, что могу использовать JsonReaderWriterFactory, но не знаю, как применить к корректирующей части сообщения.
Я знаю, что смогу сделать GZIP позже, если смогу просто прочитать и написать этот раздел Json.
Есть идеи?
Пит
OK. Так что некоторые уточнения.
Мой сервис выглядит так
[ServiceContract]
public interface IMyService {
[OperationContract]
Person SavePerson(Person personToSave);
[OperationContract]
Person GetPersons();
}
и вывод метода GetPersons () будет выглядеть примерно так:
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">http://www.petegoo.com/wcf/MyService/IMyService/GetPersonsResponse</a:Action>
<a:RelatesTo>urn:uuid:a18ccf1c-0793-4240-ba6f-9e86b6f2fdf6</a:RelatesTo>
</s:Header>
<s:Body>[{"DateOfBirth":"\/Date(286801200000+1300)\/","FirstName":"Foo","Id":1,"LastName":"Bar"},{"DateOfBirth":"\/Date(333720000000+1200)\/","FirstName":"Foo","Id":1,"LastName":"Bar"}]</s:Body>
</s:Envelope>
Примечание. Вышеприведенное было специальным, поэтому не может быть синтаксически или семантически правильным.