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并且同时有很多请求时,我如何处理它的一致性?

Web Api中的多个请求在调用WCF服务时发生异常

我解决了它。wcf层有一个静态类,它与其他线程一致。我只是把它变成了非静态的。