簡體   English   中英

調用WCF服務時,Web Api中的多個請求獲取異常

[英]Multiple Requests in Web Api gets an exception when calling WCF service

我工作的公司最近實施了.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
        }
    }
}

我的問題是:當Web Api包含WCF並且同時有很多請求時,如何處理Web Api中的並發性?

我解決了。 在wcf層有一個靜態類,該類與其他線程並發。 我只是使其變為非靜態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM