2017-10-30 13 views
0

.NET REST 응용 프로그램에서 작업하는 동안 이상한 문제가 발생합니다. 나는 모든 종류의 요청을 잘 만들 수 있지만 반환 된 List가 비어있는 경우에만이 긴 폴링 -GET 중단 요청이 성공합니다. .Add() 라인이없는 경우 mysite.com/update를 호출반환 할 때 GET 요청이 작동하지 않습니다 List <>에 항목이 있습니다.

public async Task<List<Person>> UpdateRequest() 
{ 
    try 
    { 
     await LongPolling(10000); 
    } 
    catch (TaskCanceledException) 
    { 
     Console.WriteLine("Long polling GET was cancelled."); 
     var fooList = new List<Person>(); 
     fooList.Add(new Person("tim", "bar")); // <- adding this line breaks the request 

     return fooList; 
    } 

    return null; //Timeout, aka nothing happened 
} 

을 (그리고 긴 GET의 후속 인터 럽팅)이 예상된다

<ArrayOfPerson xmlns="http://schemas.datacontract.org/stuff" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"/> 

을 반환하지만 List 항목을 포함하는 경우, 내가 얻을 : 설명하기 위해 인스턴트 "응답을 얻을 수 없습니다". Console.Writeline이 인쇄됩니다. 내가 C에서 작동하는 방법을 오해 오전 List #? 또는 반환 유형 Task<List<Person>>이 잘못되어 가고 있습니까?

편집 : 일반 배열로 시도 : Person[0]이 작동하는 유일한 방법입니다. 더 큰 배열은 "응답을받을 수 없습니다"라는 항목이 있어도 상관 없습니다.

+3

결과가 콜렉션 인 경우 절대 null을 반환하지 않아야합니다. 빈 목록을 반환하십시오. 그러면 iterators 등을 깰 수 없습니다.'새 목록 ()'을 반환하거나 정적'EmptyPersonList'를 만듭니다. –

+0

질문과 관련이 없지만 사실입니다. –

+0

@Fildor 예. 긴 폴링이 중단되지 않으면 GET 요청이 보관되고 "시간 초과"(이 경우 null, 변경됨)를 반환합니다. –

답변

0

분명히 범인은 Task<>이 아니 었습니다. 비동기 메서드 (반환 유형으로 List<Person> 포함)에도 동일한 문제가있었습니다. 클라이언트는 비어 있지 않은 사용자 지정 개체 목록을 응답에 매핑하는 방법을 알지 못합니다.이 정보는 추후에 이해할 수 있습니다.

UpdateRequest() 메서드 내에서 명시 적으로 XML에 매핑하여 Task<XElement>이 새로운 반환 유형이되었습니다.