2013-03-06 2 views
0

Я реализую службу восстановления wcf, и я хочу отправить xml, который содержит список класса для службы wcf. Другие аргументы успешно проходят службу, но список пуст. My xml;Как отправить xml, содержащий список в службу wcf?

<phoneBookWebServiceSearchResponse xmlns="http://callturksvc.alfion.com.tr"> 
    <uniqueId>40</uniqueId> 
    <webServiceResponseType>SUCCESS</webServiceResponseType> 
    <clientQueryNo>0</clientQueryNo> 
    <responseMessage>SUCCESS</responseMessage> 
    <phoneBookList> 
    <phoneBook> 
     <cityCode>34</cityCode> 
     <cityName>İstanbul</cityName> 
     <districtName>Beşiktaş</districtName> 
     <firstName>Şuayp</firstName> 
     <lastModifiedDateTime>2013-01-28T15:30:36.925+02:00</lastModifiedDateTime> 
     <lastName>Çiçek</lastName> 
     <phoneBookTypeEnumValue>TURKCELL</phoneBookTypeEnumValue> 
     <phoneNumberText>5356875946</phoneNumberText> 
    </phoneBook> 
    </phoneBookList> 
    </phoneBookWebServiceSearchResponse> 

И класс, который будет обрабатывать этот xml;

[DataContract(Name = "phoneBookWebServiceSearchResponse", Namespace ="http://callturksvc.alfion.com.tr")] 
public class phoneBookWebServiceSearchResponse 
{ 
    [DataMember(Order = 1, Name = "uniqueId")] 
    public string uniqueId { get; set; } 
    [DataMember(Order = 2, Name = "webServiceResponseType")] 
    public string webServiceResponseType { get; set; } 
    [DataMember(Order = 3, Name = "clientQueryNo")] 
    public string clientQueryNo { get; set; } 
    [DataMember(Order = 4, Name = "responseMessage")] 
    public string responseMessage { get; set; } 
    [DataMember(Order = 5, Name = "phoneBookList")] 
    public phoneBookList phoneBookList { get; set; } 

    public phoneBookWebServiceSearchResponse() 
    { 
     uniqueId = string.Empty; 
     webServiceResponseType = string.Empty; 
     clientQueryNo = string.Empty; 
     responseMessage = string.Empty; 
     phoneBookList = new phoneBookList(); 
    } 
} 


public class phoneBookList 
{ 
    [DataMember(Order = 1, Name = "phoneBook")] 
    public List<phoneBook> phoneBook { get; set; } 
    public phoneBookList() 
    { 
     phoneBook = new List<phoneBook>(); 
    } 
} 

public class phoneBook 
{ 
    [DataMember(Order = 1, Name = "firstName")] 
    public string firstName { get; set; } 
    [DataMember(Order = 2, Name = "lastName")] 
    public string lastName { get; set; } 
    [DataMember(Order = 3, Name = "cityCode")] 
    public string cityCode { get; set; } 
    [DataMember(Order = 4, Name = "cityName")] 
    public string cityName { get; set; } 
    [DataMember(Order = 5, Name = "districtName")] 
    public string districtName { get; set; } 
    [DataMember(Order = 6, Name = "lastModifiedDateTime")] 
    public string lastModifiedDateTime { get; set; } 
    [DataMember(Order = 7, Name = "phoneBookTypeEnumValue")] 
    public string phoneBookTypeEnumValue { get; set; } 
    [DataMember(Order = 8, Name = "phoneNumberText")] 
    public string phoneNumberText { get; set; } 
    public phoneBook() 
    { 
     firstName = string.Empty; 
     lastName = string.Empty; 
     cityCode = string.Empty; 
     cityName = string.Empty; 
     districtName = string.Empty; 
     lastModifiedDateTime = string.Empty; 
     phoneBookTypeEnumValue = string.Empty; 
     phoneNumberText = string.Empty; 
    } 
} 

Класс реагирования;

[DataContract(Name="CallTurkResponse", Namespace ="http://callturksvc.alfion.com.tr")] 
    public class CallTurkResponse 
    { 
     [DataMember(Name="responseMessage", Order=1)] 
     public string responseMessage { get; set; } 
    } 

Мой класс обслуживания;

[OperationContract] 
    [WebInvoke(Method = "POST", 
     ResponseFormat = WebMessageFormat.Xml, 
     RequestFormat = WebMessageFormat.Xml, 
     BodyStyle = WebMessageBodyStyle.Bare, 
     UriTemplate = "auth")] 
    CallTurkResponse Auth(phoneBookWebServiceSearchResponse res); 

И, наконец, мое обслуживание;

public CallTurkResponse Auth(phoneBookWebServiceSearchResponse res) 
    { 
     return new CallTurkResponse 
     { 
      responseMessage = "SUCCESS" 
     }; 
    } 

проблема заключается в том, что, когда я послал запрос XML выше, я получаю UniqueID, webServiceResponseType, clientQueryNo и responseMessage успешно отладчик. Но PhoneBookList приходит на обслуживание пустым.

Любое решение?

ответ

1

Используйте IEnumerable вместо списка List<phoneBook>.


Edit:

рассмотреть возможность использования IEnumerable как вариант. Но также вам нужно немного обновлений для вашего кода. Сначала вы должны пометить все классы с помощью атрибута DataContract с тем же пространством имен, которое вы отметили как класс phoneBookWebServiceSearchResponse. Другой способ вызывает конфликт имен в xml. Также вам кажется, что вам не нужен класс phoneBookList.

[DataContract(Name = "phoneBookWebServiceSearchResponse", Namespace = "http://callturksvc.alfion.com.tr")] 
    public class phoneBookWebServiceSearchResponse 
    { 
     [DataMember(Order = 1, Name = "uniqueId")] 
     public string uniqueId { get; set; } 
     [DataMember(Order = 2, Name = "webServiceResponseType")] 
     public string webServiceResponseType { get; set; } 
     [DataMember(Order = 3, Name = "clientQueryNo")] 
     public string clientQueryNo { get; set; } 
     [DataMember(Order = 4, Name = "responseMessage")] 
     public string responseMessage { get; set; } 
     [DataMember(Order = 5, Name = "phoneBookList")] 
     public List<phoneBook> phoneBookList { get; set; } 
    } 


[DataContract(Name = "phoneBook", Namespace = "http://callturksvc.alfion.com.tr")] 
    public class phoneBook 
    { 
     [DataMember(Order = 1, Name = "firstName")] 
     public string firstName { get; set; } 
     [DataMember(Order = 2, Name = "lastName")] 
     public string lastName { get; set; } 
     [DataMember(Order = 3, Name = "cityCode")] 
     public string cityCode { get; set; } 
     [DataMember(Order = 4, Name = "cityName")] 
     public string cityName { get; set; } 
     [DataMember(Order = 5, Name = "districtName")] 
     public string districtName { get; set; } 
     [DataMember(Order = 6, Name = "lastModifiedDateTime")] 
     public string lastModifiedDateTime { get; set; } 
     [DataMember(Order = 7, Name = "phoneBookTypeEnumValue")] 
     public string phoneBookTypeEnumValue { get; set; } 
     [DataMember(Order = 8, Name = "phoneNumberText")] 
     public string phoneNumberText { get; set; } 
    } 
+0

Нет, не работает :( –

+0

спасибо за ваш великий ответ @paramosh :) –

Смежные вопросы