2012-02-08 3 views
1

Я думаю, что с сериализацией что-то не должно быть правильно. Мой класс:Ответ WCF возвращается как текст/html, а не xml

[DataContract] 
public class User 
{ 
    [DataMember] 
    public int id { get; set; } 
    [DataMember] 
    public string user_id { get; set; } 
    ... 

    public User() { } 

    public User(int id, string user_id, ...) 
    { 
     this.id = id; 
     this.user_id = user_id; 
     ... 
    } 
} 

[DataContract] 
public class UserCollection 
{ 
    [DataMember] 
    public List<User> users { get; set; } 

    [DataMember] 
    public int count { get; set; } 

    [DataMember] 
    public int page { get; set; } 

    public UserCollection() { } 

    public UserCollection(List<User> users, int count, int page) 
    { 
     this.users = users; 
     this.count = count; 
     this.page = page; 
    } 
} 

API-интерфейс вызова:

[WebGet(UriTemplate = "?promotion_id={promotion_id}&page={page}&format={format}")] 
    public UserCollection GetAllUsers(string promotion_id, string page, string format) 
    { 
     if (string.Equals("json", format, StringComparison.OrdinalIgnoreCase)) 
      WebOperationContext.Current.OutgoingResponse.Format = WebMessageFormat.Json; 

     UserFactory factory = new UserFactory(); 
     return factory.GetUsersByPromotionID(int.Parse(promotion_id), (int.Parse(page) - 1) * 50, 50); 
    } 

Сгенерированный источник:

<UserCollection xmlns="http://schemas.datacontract.org/2004/07/API.Library.Resources" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><count>0</count><page>0</page><users/></UserCollection> 

Он не отображает XML на странице, потому что это говорит тип ответ текст/html. Есть идеи?

ответ

0

Какой клиент вы используете для вызова веб-службы?

Вы можете попробовать

WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml"; 
+0

Я использую автоматический выбор формата:

+0

Это зависит от HTTP-запроса, отправленного клиентом. См. [Форматирование веб-HTTP WCF] (http://msdn.microsoft.com/en-us/library/ee476510.aspx). – Gene

+0

Я просто обращаюсь к нему в браузере. Заголовок запроса говорит: Принять: текст/html, application/xhtml + xml, application/xml; q = 0.9, */*; q = 0.8 –

0

Вы пробовали добавлять ResponseFormat = WebMessageFormat.Xml?

[WebGet(UriTemplate = "?promotion_id={promotion_id}&page={page}&format={format}", ResponseFormat = WebMessageFormat.Xml)] 
+0

Я использую автоматический выбор формата: Он генерирует xml, по какой-то причине тип ответа неверен. –

0

Вы устанавливаете формат исходящего отклика как Json, когда передаете значение формата как json.

WebOperationContext.Current.OutgoingResponse.Format = WebMessageFormat.Json; 

Вы уверены, что отправили правильный формат. Также попробуйте проверить запрос и ответ с помощью Fiddler.

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