2012-06-12 3 views
1

Я пытаюсь кэшировать динамический список, полученный из SQL Server в WCF, процесс извлечения работает до сих пор, и я его протестировал, и проблем с ним нет, проблема когда я пытаюсь кэшировать этот извлеченный список, возникает ошибка, и я не могу выяснить причину этого.Ошибка списка кэширования WCF

Вот мой метод:

public List<ErrorEntities> GetALL() 
{ 
      List<ErrorEntities> res = null; 
      if (HttpContext.Current.Cache["GetALL"] == null) 
      { 
       SqlCommand com = Global.GetCommand("select * from [BlockingList]"); 
       com.Connection.Open(); 
       SqlDataReader reader = com.ExecuteReader(); 
       res = Fill(reader); 

       HttpContext.Current.Cache.Add("GetALL", res, null, DateTime.Now.Add(new TimeSpan(0, 0, 15)), Cache.NoSlidingExpiration, CacheItemPriority.Normal, null); 

       com.Connection.Close(); 
       return res; 
      } 
      else 
      { 
       res = HttpRuntime.Cache["GetALL"] as List<ErrorEntities>; 
       return res; 
      } 
} 

Я попытался включить кэширование на файл web.config, добавив следующую строку кода, но проблема не была решена, а также:

<scriptResourceHandler enableCompression="true" enableCaching="true" /> 

и вот ошибка я получаю, когда я компилирую решение:

сервер не смог обработать запрос из-за внутренней ошибка. Для получения дополнительной информации об ошибке либо включите IncludeExceptionDetailInFaults (либо из ServiceBehaviorAttribute , либо из поведения конфигурации) на сервере в , чтобы отправить информацию об исключении обратно клиенту или включить трассировку в соответствии с Microsoft .NET. Документация SDK Framework 3.0 и проверяют журналы трассировки сервера.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more 

информация об ошибке и произошла с кодом.

Exception Details: System.ServiceModel.FaultException: The server was unable to process the request due to an internal error. For more 

информация об ошибке, либо включить IncludeExceptionDetailInFaults (либо из ServiceBehaviorAttribute или от поведения конфигурации) на сервере в для того, чтобы отправить информацию об исключении обратно клиенту, или включить трассировки, как на документацию SDK Microsoft .NET Framework 3.0 и проверяют журналы трассировки сервера.

Source Error: 


Line 113:   
Line 114:  public ServiceReference1.ErrorEntities[] GetALL() { 
Line 115:   return base.Channel.GetALL(); 
Line 116:  } 
Line 117: 

ответ

1

Я предполагаю, что код, указанный на вопрос называется внутри метода WCF.

WCF работает в своем собственном контексте, и HttpContext.Current не должен использоваться там.

Microsoft добавил новый кэш, который не имеет зависимости System.Web в .NET 4.0.

MemoryCache должен хорошо работать в WCF.

Попробуйте использовать этот код для получения объекта кэша:

ObjectCache cache = MemoryCache.Default; 

http://msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache.aspx

Я также рекомендовал бы использовать using или try-finally блоки для одноразового использования ресурсов (Connection в примере кода)

Смежные вопросы