WCF Rest Несколько заключенных контрактов данных

Итак, я вызываю веб-сервис wcf, используя Rest WebHttp. Я также настроил второй связующий мексикан для тестирования. Мой метод работает, но когда я пытаюсь протестировать через fiddler или прямой httppost через клиентское приложение, я получаю ошибку 400 Bad request. Я передаю методу несколько контрактов данных. Это заставляет меня использовать BodyStyle для обертывания, но я не знаю, как отформатировать свой xml для теста. Я создал тестовый метод, чтобы попробовать это и ту же ошибку. Вот мой код: все мои другие методы работают с одним контрактом данных, но этот, где у меня есть два, не работает. Я считаю, что проблема в xml внизу этого поста, его нужно обернуть, но я не знаю, как его обернуть.

[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped)]
string Test(wsAuth a, wsMed m);

[DataContract(Namespace = "")]
public class wsMed
{
 [DataMember]
 public string Test{ get; set; }
}

[DataContract(Namespace = "")]
public class wsAuth
{
 [DataMember]
 public string UserName { get; set; }
 [DataMember]
        public string Password { get; set; }
 [DataMember]
 public string DeviceId { get; set; }
}

мой xml, который я использую

<Test>
<wsAuth>
 <DeviceId>jenglish</DeviceId>
 <Password>treetop</Password>
 <UserName>jenglish</UserName>
</wsAuth>
<wsMed>
 <Test></Test>
</wsMed>
</Test>

person Carter    schedule 25.06.2010    source источник


Ответы (1)


Боюсь, вы будете бороться с этим. Во-первых, вам не хватает пространств имен сериализации DataContract. DataContractSerializer довольно разборчив в том, как он хочет отформатировать xml.

Был вопрос только недавно от кого-то, кто пытался сделать что-то гораздо более простое, и ему было трудно заставить WCF принять это.

Вот объяснение того, как форматировать упакованные параметры.

person Darrel Miller    schedule 25.06.2010
comment
Привет, Даррел, большое спасибо за совет и указание на пару хороших постов. Я заставил его работать, я сохранил пространства имен, но мои методы передавали a и m в качестве имен параметров, поэтому теперь работает следующее: ‹Test› ‹a› ‹DeviceId›jenglish‹/DeviceId› ‹Пароль›treetop‹/Пароль› ‹UserName›jenglish‹/UserName› ‹/a› ‹m› ‹Test›‹/Test› ‹/m› ‹/Test› - person Carter; 25.06.2010
comment
@Картер Удачи. Он вам понадобится ;-) - person Darrel Miller; 25.06.2010