WCF MessageПишите разъяснения, пожалуйста - PullRequest
1 голос
/ 04 июля 2011

Я немного запутался с тем, как Атрибут MessageContract работает в WCF.

Когда я помещаю MessageContract, прокси-сервер показывает два параметра вместо 1. Например:

GetResultResponse GetOperation(GetResultRequest request)

[MessageContract]
public class GetResultRequest 
{
   [MessageHeader]
   public Header Header { get; set; }
   [MessageBodyMember]
   public List<Person> PersonList { get; set; }

}

Прокси-сервер генерирует этоПодпись метода:

GetOperation(ref Header, List<Person> personList)

Когда я удаляю MEssageContract Атрибуты: Прокси-сервер Генерирует правильные подписи:

GetOperation(GetResultRequest request)

Может ли кто-нибудь подтвердить, является ли это ожидаемым поведением?

Ответы [ 2 ]

6 голосов
/ 04 июля 2011

Это поведение по умолчанию. Когда вы генерируете прокси, он не создает контракты сообщений по умолчанию. Вы можете включить это в расширенная конфигурация в Добавить сервисную ссылку (проверяя Всегда генерировать контракты сообщений ) или /messageContract переключиться в svcutil . Как только вы включите его, вы получите методы с параметром контракта с одним сообщением, как у службы.

0 голосов
/ 04 июля 2011

Если у вас нет особых требований пометить заголовок атрибутом MessageHeader, попробуйте изменить атрибут класса на Datacontract, а ваши свойства - на атрибуты DataMember и посмотреть, не изменится ли поведение. Насколько я знаю, если вы не внедрили собственный сериализатор, вы не сможете повлиять на то, как svcutil создаст ваш прокси.

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