该问题是由于您的ServiceClient
未指定已知响应类型的请求。
可以使用以下方法在请求 DTO 上标记响应类型IReturn<T>
标记(推荐):
public class GetAllAdminUsernamesRequest : IReturn<List<string>> { ... }
通过将其添加到请求 DTO 上,ServiceClient 能够自动推断并转换响应,例如:
List<string> response = client.Get(new GetCurrentAdminUserAdminTasks());
否则,在请求 DTO 上指定响应的另一种方法是在调用站点上指定它,例如:
List<string> response = client.Get<List<string>>(new GetCurrentAdminUserAdminTasks());
如果您不这样做,响应是未知的,因此 ServiceClient 将仅返回底层HttpWebResponse
这样您就可以自己检查响应。
HttpWebResponse tasks = client.Get(new GetCurrentAdminUserAdminTasks());
为了能够检查和读取HttpWebResponse
ServiceClient 无法处理响应,因此由调用站点发出正确处理响应的请求,即:
using (HttpWebResponse tasks = client.Get(new GetCurrentAdminUserAdminTasks())) {}
using (HttpWebResponse adminUsers = client.Get(new GetAllAdminUsernames())) {}
try
{
using (client.Put(new AssignTask { AdminTaskId = taskId, Assignee = user })) {}
using (client.Put(new AssignTask { AdminTaskId = taskId, Assignee = user })) {}
using (client.Put(new AssignTask { AdminTaskId = taskId, Assignee = user })) {}
using (client.Put(new AssignTask { AdminTaskId = taskId, Assignee = user })) {}
}
...
处理您的 WebResponses 响应将解决您的问题。
如果你不这样做的话WebRequest
将限制打开的连接,并且在任何时间只允许有限数量的并发连接通过,可能作为防止 DDOS 攻击的安全措施。这就是保持底层连接开放的原因WebRequest
阻塞,等待它们被释放。