我工作的公司最近实施了.Net Web Api 2,我负责。我遇到了一个我无法解决的问题。
有一种消耗WCF服务的Post方法。这个WCF在大约30秒内执行,并且创建了一些我作为请求传递的列表。所以我在调用Web Api方法时已经阅读了并发性并且感到害怕。但是我确实将IHttpActionResult实现为我所有ApiControllers的结果类型。在该实现中,我已经完成,因为每个人都建议返回一个任务。然而,异常仍然发生。这个例外是通用的,对我来说显然是两个线程之间的并发。下面我将向您展示一段代码。
更新
通用意味着我一直在获得不同的例外。因为并发可能发生在任何地方。
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
}
}
}
我的问题是:如果在服务于WCF并同时提出大量请求时,我如何处理Web Api中的可靠性?
答案 0 :(得分:0)
我解决了。在wcf层有一个静态类,它与其他线程一致。我只是把它做成了非静态的。