2012-02-23 2 views
1

웹 서버는 항목을 전달하고 클라이언트는 항목을 처리합니다. 일부 항목을 가져 오는 일부 데이터 가져 오기 서비스를 작성했습니다.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.. 
} 

그래서 왜가 발생, 문제를 해결합니다 다음에 클라이언트 코드를 변경?

답변

0

,

while(true){ 
    var wcfClient = new WCFClient(); 
    var items = wcfClient.GetPendingItems(); 
    Utils.Log(DateTime.Now, items); 
    // do something with items.. 
} 

재사용 WCFClient (비누 클라이언트 엔드 포인트)도 말아야 때, 그것은 캐시 된 데이터를 전송하게됩니다.

0

제 생각에이 문제는 Linq 및 WCF와 관련이있을 수 있습니다. 다음에 코드를 변경하면 문제가 해결

+0

내 업데이트를보고 클라이언트 측 코드를 변경하면 문제가 해결되지만 그 이유는 알고 싶습니다. –

관련 문제