【发布时间】:2023-04-01 12:45:01
【问题描述】:
我工作的公司最近实施了 .Net Web Api 2,我负责。我遇到了一个我无法解决的问题。
有一个使用 WCF 服务的 Post 方法。这个 WCF 在大约 30 秒内执行并列举了一些我作为请求传递的列表。所以我在调用 Web Api 方法时读到了并发性并感到害怕。但是,我确实将 IHttpActionResult 实现为所有 ApiController 的结果类型。在那个实现中,我已经按照每个人的建议返回一个任务。尽管如此,异常仍然发生。这个异常是通用的,对我来说显然是两个线程之间的并发。下面我给大家看一段代码。
更新
通用意味着我总是遇到不同的异常。因为并发可能无处不在。
public IHttpActionResult Post([FromBody]Cotacao cotacao)
{
return new CotacaoResult(cotacao, Request);
}
public abstract class ActionResult<T> : IHttpActionResult where T : class
{
protected T Item { get; private set; }
protected HttpRequestMessage Request { get; private set; }
protected ActionResult(HttpRequestMessage request)
{
Item = null;
Request = request;
}
protected ActionResult(T item, HttpRequestMessage request)
{
Item = item;
Request = request;
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
return Task.FromResult(Do());
}
private HttpResponseMessage Do()
{
try
{
return Execute();
}
catch (Exception)
{
return new HttpResponseMessage(HttpStatusCode.InternalServerError) { RequestMessage = Request };
}
}
protected abstract HttpResponseMessage Execute();
}
public class CotacaoResult : ActionResult<Cotacao>
{
public CotacaoResult(Cotacao item, HttpRequestMessage request) : base(item, request) { }
protected override HttpResponseMessage Execute()
{
using (var gateway = new GatewayClient()) //WCF Service
{
var result = gateway.CreateQuote(Item.ToQuote());
//Something else
}
}
}
我的问题是:当 Web Api 使用 WCF 并且同时有很多请求时,我该如何处理 Web Api 中的并发?
【问题讨论】:
-
“异常是通用的”?这意味着什么?错误是什么?
-
@DavidG 当我说通用时,我的意思是抛出了不同类型的异常。因为并发发生在代码的不同位置。
-
举个例子怎么样? Web Api 被设计为并发调用,它本质上只是一个 Web 服务。
标签: c# wcf c#-4.0 asp.net-web-api asp.net-web-api2