Web Api中的多个请求在调用WCF服务时发生异常
本文关键字:服务 WCF 异常 调用 Api 请求 Web | 更新日期: 2023-09-27 18:22:11
我工作的公司最近实现了.Net Web Api 2,我对此负责。我面临着一个无法解决的问题。
有一个Post方法,它使用WCF服务。这个WCF在大约30秒内执行,并枚举了我作为请求传递的一些列表。所以我在调用WebApi方法时读到了关于并发性的文章,我很害怕。然而,我确实实现了IHttpActionResult作为我所有ApiControllers的结果类型。在这个实现中,我已经按照每个人的建议返回了一个Task。尽管如此,例外情况仍然存在。这个异常是一般性的,对我来说显然是两个线程之间的并发。下面我将向您展示一段代码。
更新
Generic意味着我总是得到不同的异常。因为并发可能无处不在。
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
}
}
}
我的问题是:当WebApi包含WCF并且同时有很多请求时,我如何处理它的一致性?
我解决了它。wcf层有一个静态类,它与其他线程一致。我只是把它变成了非静态的。