我在使用.NET REST应用程序时遇到了一个奇怪的问题。我可以很好地做出各种各样的请求,但是如果返回的List为空,这个长轮询-GET中断请求只会成功。举例说明:
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
}
当.Add()
行不存在时,调用mysite.com/update
(以及随后中断长GET)返回
<ArrayOfPerson xmlns="http://schemas.datacontract.org/stuff" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"/>
这是预期的,但当List
包含项目时,我会立即得到“无法得到答复”。打印Console.Writeline。我误解了List
在C#中的工作方式吗?或者我可能错误的返回类型Task<List<Person>>
?
编辑:尝试使用普通数组:Person[0]
是唯一可行的,更大的数组“无法获得响应”,无论其中是否有项目。
答案 0 :(得分:0)
显然罪魁祸首不是Task<>
。非异步方法(List<Person>
作为返回类型)具有相同的问题。客户端根本不知道如何将非空的自定义对象列表映射到响应,事后才能理解。
我最终在List
方法中明确地将UpdateRequest()
映射到XML,从而导致Task<XElement>
成为新的返回类型。