如何配置Web API以同时响应多个客户端?

时间:2019-06-18 07:04:48

标签: c# post webserver

我正在为Web api设置新服务器,但是当我尝试从两个单独的客户端发出发布请求时,服务器仅响应第一个。从第二个开始,我总是会收到500 Internal Server Error。

我试图将服务器中的所有方法设为异步,但是发生了相同的错误。

我通过以下方式调用网络服务:

using(var client = new HttpClient())
{
    client.BaseAddress = new Uri("http://serverdomain/ApiName/")
    var response = client.PostAsync("controller/method", 
keyvaluepairContent);
    result = response.Result.Content.ReadAsAsync<List<string>>().Result;
}

相关服务代码如下:

[Route("controller/method")]
[AcceptVerbs("POST")]
public List<string> Foo([FromBody] someparams)
{
    //some logic
}

我将配置文件写为:

config.Routes.MapHttpRoute(
    name : "DefaultApi",
    routeTemplate : "{controller}/{action}/{id}",
    defaults : new { id = RouteParameter.Optinal }
);

对于一个客户端,服务器同时运行良好。我得到了我所需要的。但是,当两个客户端甚至针对不同的方法发出请求时,延迟的客户端始终会收到500内部错误。调试器说下面的代码无法解析结果,这是因为响应不是字符串列表,而是上面的错误。

result = response.Result.Content.ReadAsAsync<List<string>>().Result;

我认为我的代码很好,但是我需要配置Web API。我确实搜索过,但没有结果。

1 个答案:

答案 0 :(得分:0)

首先在评论中提到,您使用HttpClient错误,请查看this

要使您的WebAPI能够响应多个调用asynchronously,您需要将代码包装在适当的方法签名中,如下所示:

[Route("controller/method")]
[AcceptVerbs("POST")]
public async Task<IHttpActionResult> Foo([FromBody] someparams)
{
    //some logic
}

来自另一个stackoverflow答案here

的一些有价值的信息

另一个简单的答案here

就像您在问题中提到的那样,您尝试使用所有方法async,但是问题是您需要使用Task