[英]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.