Мы пытаемся кешировать данные службы WCF, поэтому, когда данные доступны в кеш-памяти, нам нужно возвращать кешированные данные из кеша как AsyncResult, поскольку данные относятся к типу объектов, а метод Start - IAsyncResult.
Здесь я не могу изменить тип возвращаемого значения, поскольку он является абстрактным членом в классе помощника.
А также я не могу проверить доступность и пропуск кэширования родительской страницы, поскольку его необходимо изменитьво всем мире, так что те, кто использует эту услугу, могут использовать ее.
public override IAsyncResult Start(object sender, EventArgs e, AsyncCallback cb, object extraData)
{
if(cache.Get("key")
{
//Needs to return the result Async format which is there as object in cache.
}
svc = new service.GetData(m_url);
if (m_debug_mode) // not thread safe
{
return ((service.GetData)svc).BeginCallDataDebug(request, cb, extraData);
}
return ((service.GetData)svc).BeginCallData(request, cb, extraData);
}
public override void End(IAsyncResult ar)
{
try
{
data = ((service.GetData)m_svc).EndCallData(ar);
if(data !=null)
cache.Add("key", data, null, absoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Default, null);
}
catch(Exception ex)
{
Log(ex.message);
}
}