웹 서버는 항목을 전달하고 클라이언트는 항목을 처리합니다. 일부 항목을 가져 오는 일부 데이터 가져 오기 서비스를 작성했습니다.WCF 클라이언트가 캐시 된 응답을받습니다.
웹 메소드 클라이언트 측에서 지금과 같은 코드가 같은 방식으로 작성되었습니다
[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
, 16,
는 wcfClient
클라이언트
10:10:10 1,2,3
10:10:11 4,5,6
10:10:11 4,5,6 <-- this is the problem
에 의해 지금 나는이 문제가 될 수 알고있는 글로벌 WCF 서비스 인스턴스이다받은, 그래서 우리는 새로운 WCFClient 인스턴스를 만들려고하고 작동하는지 확인하려고 그러나 당신이 알아 차리면, while 루프에서 호출은 완전히 독립적이고 동기식입니다.
좀 더 자세히 살펴보면 드물게 발생하지만 서버에서 가져온 것이 아니라 WCF 클라이언트 반환 및 이전 응답으로 보입니다.
왜 이런 일이 발생했는지, 왜 WCF 캐시 응답이 전혀 없는지 설명 할 수있는 설정이 있습니다.
우리는 양 끝에 최신 .NET 4.0 프레임 워크를 사용하고 있습니다. 평균 2-5 %의 품목은 이런 식으로 놓치게됩니다.
WCF에서 좋은 경험이 없지만 WCF의 특성을 알고 있기 때문에 전혀 캐시해서는 안됩니다. 캐시 된 응답을 보내는 경우에도 WCF는 서버에서 메서드를 실행하면 안됩니다.
BasicHttpBinding을 선택 했으므로 모두 HTTP POST 요청이라고 가정합니다.
UPDATE
같은 클라이언트를 사용하는 경우
while(true){
var wcfClient = new WCFClient();
var items = wcfClient.GetPendingItems();
Utils.Log(DateTime.Now, items);
// do something with items..
}
그래서 왜가 발생, 문제를 해결합니다 다음에 클라이언트 코드를 변경?
내 업데이트를보고 클라이언트 측 코드를 변경하면 문제가 해결되지만 그 이유는 알고 싶습니다. –