Web Api中的多个请求在调用WCF服务时会出现异常

时间:2014-09-17 20:43:19

标签: c# wcf c#-4.0 asp.net-web-api asp.net-web-api2

我工作的公司最近实施了.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中的可靠性?

1 个答案:

答案 0 :(得分:0)

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