вот
здесьАвтор: Powerz
Дата: 29.02.12
был похожий вопрос.
Вкратце, надо сделать WCF-сервис, который сможет принимать и обрабатывать SOAP-запрос такого вида:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:updateBillExt xmlns:ns2="http://rsdn.ru/">
<login>xxxxx</login>
<password>xxxx</password>
<txn>xxxx</txn>
<status>xxxx</status>
<Message>
<string>string 1</string>
<string>string 2</string>
</Message>
</ns2:updateBillExt>
</soap:Body>
</soap:Envelope>
Исходя из поста ссылку на который я дал вначале, я получил следующий код:
[ServiceContract(Namespace = "http://rsdn.ru/", Name = "MyService", SessionMode = SessionMode.NotAllowed)]
public interface IMyService
{
[OperationContract(Name = "updateBillExt",Action = "*")]
void updateBillExt(updateBillInfo request);
}
Определил контракт сообщения:
[MessageContract(WrapperName = "updateBillExt", WrapperNamespace = "http://rsdn.ru/")]
public sealed class updateBillInfo
{
[MessageBodyMember(Name = "login", Namespace = "", Order = 0)]
public string Login { get; set; }
[MessageBodyMember(Name = "password", Namespace = "", Order = 1)]
public string Password { get; set; }
[MessageBodyMember(Name = "txn", Namespace = "", Order = 2)]
public string Txn { get; set; }
[MessageBodyMember(Name = "status", Namespace = "", Order = 3)]
public int Status { get; set; }
[MessageBodyMember(Name = "Message", Namespace = "", Order = 4)]
public string[] Message { get; set; }
}
сам метод:
public void updateBillExt(updateBillInfo postData)
{
}
Проблема в следующем:
При запросе мне приходят все значения, кроме массива данных "Message".
Причём, если я из запроса убераю участок
<Message>
<string>string 1</string>
<string>string 2</string>
</Message>
то в Message приходит null, если оставляю, то просто пустая строка.
Здравствуйте, Petya77, Вы писали:
Попробуйте так:
[CollectionDataContract(ItemName = "string", Namespace = "")]
public class MessageType : List<string>
{
}
[MessageContract(WrapperName = "updateBillExt", WrapperNamespace = "http://rsdn.ru/")]
public class updateBillInfo
{
[MessageBodyMember(Name = "login", Namespace = "", Order = 0)]
public string Login { get; set; }
[MessageBodyMember(Name = "password", Namespace = "", Order = 1)]
public string Password { get; set; }
[MessageBodyMember(Name = "txn", Namespace = "", Order = 2)]
public string Txn { get; set; }
[MessageBodyMember(Name = "status", Namespace = "", Order = 3)]
public int Status { get; set; }
[MessageBodyMember(Name = "Message", Namespace = "", Order = 4)]
public MessageType Message { get; set; }
}
[ServiceContract(Namespace = "http://rsdn.ru/", Name = "MyService", SessionMode = SessionMode.NotAllowed)]
public interface IMyService
{
[OperationContract(Name = "updateBillExt")]
void updateBillExt(updateBillInfo request);
}