WCF Serialized List объект, дающий странные имена для объектов - PullRequest
6 голосов
/ 03 августа 2011

Вот подпись метода в службе WCF:

APIMessageList<APISimpleContact> GetMembers(string apiKey, APIContactSearchFilter filter);


APIMessageList наследуется от IList.После того, как я создал прокси для этой службы WCF, имя класса будет APIMessageListOfAPISimpleContactjHldnYZV .

Почему я не получаю: APIMessageListOfAPISimpleContact ?

Добавляет случайный текст в конец каждого объекта APIMessageList в интерфейсе (их несколько). Все они заканчиваются одинаковыми символами - jHldnYZV.Я искал в Интернете возможные причины, но я не могу найти никаких сообщений людей, имеющих эту проблему.

Это чисто косметическая проблема, но этот интерфейс открыт для наших внешних клиентов, поэтому его внешний вид важен.

Кто-нибудь знает, почему у меня возникает эта проблема?

Большое спасибо
Джо

Ответы [ 2 ]

7 голосов
/ 03 августа 2011

Ваше решение будет на http://msdn.microsoft.com/en-us/library/ms731045.aspx. По сути, поскольку у вас может быть несколько классов "SimpleContract" (в разных пространствах имен), WCF добавит хэш для устранения неоднозначности в конец имени контракта, что у вас есть в 8 символов в конце названия контракта. Но вы можете контролировать это, используя CollectionDataContract и его свойство Name:

[CollectionDataContract(Name = "APIMessageListOfSimpleContract")]
public class APIMessageList : IList<SimpleContract> { ... }
0 голосов
/ 03 августа 2011

У нас была похожая проблема при использовании универсальных типов для возвращаемых значений. Если мы не указываем конкретный тип, сериализатор контракта данных по умолчанию или сериализатор WCF не могут определить точный тип возвращаемого объекта. Следовательно, он генерирует случайное имя класса для возвращаемого типа.

В нашем проекте мы преодолели эту проблему, создав контракт данных, который имел определенный тип и возвращал то же самое в результате вызова операции WCF.

Я предполагаю, что вы используете универсальный тип, а сериализатор не может определить тип возвращаемого объекта.

Я предлагаю вам создать объект передачи данных (DTO) и вернуть его из службы WCF. Это должно решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...