[WCF] Обработка SOAP запроса
От: Petya77  
Дата: 13.06.12 12:39
Оценка:
вот здесь
Автор: 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, если оставляю, то просто пустая строка.
wса soap
Re: [WCF] Обработка SOAP запроса
От: Petya77  
Дата: 14.06.12 07:48
Оценка:
Подниму тему
Re[2]: [WCF] Обработка SOAP запроса
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 14.06.12 08:42
Оценка:
Здравствуйте, 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);
}
Re[3]: [WCF] Обработка SOAP запроса
От: Petya77  
Дата: 14.06.12 10:39
Оценка:
Здравствуйте, Михаил Романов,
Большое спасибо, несмотря на то, что я пытался через "коллекцию списков" сделать *( и классы), у меня не получалось.
А с вашей подсказкой получилось, ещё раз спасибо!
п.с. Честно говоря так и не понял в чём ошибка с массивом и классами...
wcf soap qiwi
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.