簡體   English   中英

“監聽器”上的事件沒有在asp.net中觸發,但在控制台應用程序中工作c#

[英]Event on a “Listener” not firing in asp.net, but works in console app c#

我已經將“Apache Geode”實現到控制台應用程序中並成功贏得表單。

我已將此解決方案轉換為“類庫”。

當我調用此類庫來設置“緩存偵聽器”時,它適用於控制台應用程序,但不適用於asp.net(MVC)應用程序。

我試過在Index()方法里面的MVC HomeController中調用這個dll。 這就是dll中的內容:

    internal void RegisterQuoteListener(Cache c, string quoteReqId, Action<string, Quote> AddQuote,
                                        Action<string, QuoteAcknowledgement> AddQuoteAck,
                                        Action<string, QuoteCancel> AddQuoteCancel)
    {
        List<string> s = new List<string>();
        s.Add(quoteReqId);

        IRegion<string, Object> q = c.GetRegion<string, Object>("quote");

        try
        {
            q.GetSubscriptionService().RegisterKeys(s);
            q.AttributesMutator.SetCacheListener(new LQuote<string, Object>(this, AddQuote, AddQuoteAck, AddQuoteCancel));
        }
        catch (Exception ex)
        {
            new ApplicationException("Can't register key: " + quoteReqId, ex);
        }
    }



    public override void AfterCreate(EntryEvent<TKey, TVal> ev)
    {
        HandleCreateAndUpdate(ev);
    }

它應該工作的方式是為特定鍵設置一個監聽器,然后當任何消息到達具有相同鍵的區域時,它應該觸發一個名為“public override void AfterCreate(EntryEvent ev)”的事件。

在此示例中是否存在與控制台應用程序不同的MVC限制?

我可以根據您的問題提供更多信息。

EDIT1

在MVC HomeController里面我像這樣調用這個幫助器:

 public ActionResult Index()
    {
        //var a = new Geode().QuoteRequestWrapper("EUR", "GBP", "GBP", DateTime.Now.Date.AddDays(14), 10, "any reference", true);

        //Create Instance
        Geode geode = new Geode();

        //Initialize Cache
        geode.InitializeCache(ip, port, pool);

        //Send Geode message
        geode.GeodePut("region1", Guid.NewGuid().ToString().Substring(0, 8).ToUpper(), "Starting Geode Test");

        //Quote request - single
        geode.QuoteRequest("EUR", "GBP", "GBP", DateTime.Now.Date.AddDays(14), 10, "any reference", true);
        return View();
}

geode.QuoteRequest它設置了一個“Listener”,它應該從初始化的緩存中將事件激發到一個方法中。 但這個行動從未被召喚過。

你究竟如何在控制器中調用該DLL? 控制器不是單例,將在每個請求上創建一個新實例,因此如果您在控制器的屬性上存儲助手類的實例,則您的設置將不會保留。

理想情況下,您將使用可以將輔助類的單個實例注入控制器的DI容器。 您也可以嘗試使用靜態參數。

答案如下: 如何使“CacheListenerAdapter”在ASP.NET中運行?

如果您使用的是低於10.0.0的GemFire Native Client版本,則可能會遇到ASP.NET中AppDomain的問題。 雖然許多AppDomain問題在9.x中得到緩解,但有些問題在該版本中無法解決。 更新到最新的10.x應解決您的問題。

暫無
暫無

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

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