Автоматически созданный прокси-класс не соответствует контракту на обслуживание

Я использую Visual Studio 2012 для автоматического создания прокси-класса для службы WCF. В контракте службы один из методов GetActiveSessions() определен как возвращающий Dictionary<Guid, Session>, но вот как свойство отображается в моем прокси-классе:

public MyNamespace.ArrayOfKeyValueOfguidSessionxjDRWaWoKeyValueOfguidSessionxjDRWaWo[] GetActiveSessions() {
    ....
}

Есть еще один пример этого странного поведения, когда метод службы, который должен возвращать Guid, определяется как возвращающий string в моем прокси-классе. Хотя методы, кажется, работают, как указано, когда я использовал методы, определенные прокси-классом, я бы не хотел работать с объектами типа ArrayOfKeyValueOfguidSessionxjDRWaWoKeyValueOfguidSessionxjDRWaWo в моем коде.

Есть идеи относительно того, что вызывает это странное поведение?


person Nathan Friend    schedule 14.08.2013    source источник


Ответы (1)


Это ожидаемое поведение. Формат сериализованного провода прокси будет соответствовать схемам, определенным в WSDL / XSD. Однако в WSDL есть много анонимных типов и массивов, у которых нет имени, и когда вы работаете с прокси-сервером, вам нужно давать им имена. Таким образом, WCF вычисляет уникальное имя, связывая имена по пути элемента. Если вам нужно другое имя, либо создайте оболочку поверх прокси (и поддерживайте ее), либо не используйте анонимные типы в WSDL.

person Yaron Naveh    schedule 14.08.2013
comment
В этом есть смысл. Спасибо! - person Nathan Friend; 14.08.2013