Я написал несколько служб извлечения данных, которые извлекают некоторые объекты с основного веб-сервера, веб-сервер доставляет элементы и клиент обрабатывает элементы.Клиент WCF получает кеш-ответ
Web Метод
[OperationContract]
public DataItem[] GetPendingItems(){
using(DBContext c = new DBContext()){
var q = c.DataItems.Where(x=>x.Attempts<4)
.OrderBy(x=>x.Attempts)
.ThenBy(x=>x.ItemID);
foreach(var item in q){
item.Attempt ++; // making sure item was sent from server
// log what was sent..
}
Utils.Log(DateTime.Now, items);
c.SaveChanges();
return q.ToArray();
}
}
Теперь аналогичный код на стороне клиента была написана таким образом ..
while(true){
var items = wcfClient.GetPendingItems();
Utils.Log(DateTime.Now, items);
// do something with items..
}
Теперь вот проблема,
Отправляется сервером
10:10:10 1,2,3
10:10:11 4,5,6
10:10:11 7,8,9
полученного Клиент
10:10:10 1,2,3
10:10:11 4,5,6
10:10:11 4,5,6 <-- this is the problem
wcfClient является глобальной службой WCF Instance Теперь я знаю, что это может быть проблемой, так что мы пытаемся создать новый WCFClient экземпляр и пытаемся увидеть, если он работает, но если вы заметите, что в моем цикле while вызовы полностью независимы и синхронны.
Но, если смотреть более внимательно, это случается редко, но выглядит как возврат клиента WCF и старый ответ обратно, а не то, что он сделал с сервера.
Теперь есть какие-либо настройки, которые могут объяснить мне, почему это происходит, или почему вообще ответ на WCF.
Мы используем последнюю среду .NET 4.0 на обоих концах. В среднем 2-5% предметов пропущены таким образом.
У меня нет хорошего опыта работы в WCF, но, зная природу WCF, он не должен ничего кэшировать. Даже если он отправляет кешированный ответ, WCF не должен выполнять метод на сервере.
Я предполагаю, что все HTTP-запросы POST, как мы выбрали BasicHttpBinding.
UPDATE
Изменение кода клиента к следующему решает вопрос,
while(true){
var wcfClient = new WCFClient();
var items = wcfClient.GetPendingItems();
Utils.Log(DateTime.Now, items);
// do something with items..
}
Так почему это происходит, если используется тот же клиент?
См. Мое обновление, изменение кода на стороне клиента устраняет проблему, но я хочу знать, почему она не работает в противном случае. –