Я реализовал «Apache Geode» в консольном приложении и успешно выиграл формы.
Я преобразовал это решение в «Библиотеку классов».
Когда я вызываю эту библиотеку классов для настройки «Cache Listener», она работает в консольном приложении, но не в приложении asp.net (MVC).
Я пытался вызвать эту dll внутри MVC HomeController внутри метода Index ().
Вот что внутри 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
он устанавливает «Слушатель», который должен инициировать событие в метод из инициализированного кэша. Но действие никогда не называется.