2011-12-02 3 views
0

내 동료가 다음과 같은 문제가 항상 해당 ID와 일치하는 개체를 찾으십시오. 일치하는 개체는 비동기 "완료된"처리기를 통해 Silverlight 응용 프로그램에 반환됩니다. Silverlight 측의 호출은 루프로 이루어지며 WCF는 데이터베이스 액세스를 수행하고 개체를 찾아 업데이트 한 다음 반환합니다. Silverlight 완료 처리기는 반환을 캐치하고 개체를 다시 컬렉션에 채 웁니다.는 비동기 처리기에서 반환 값은 같은

어떤 이유로 인해 수신 된 객체 목록이 모두 동일한 객체입니다. 중단 점을 사용하여 Silverlight 응용 프로그램은 올바른 개체를 보내고 WCF는 올바른 개체를 받고 반환하지만 개체를 ​​받으면 Silverlight 응용 프로그램은 같은 개체를 반복해서 계속 가져옵니다 (그러나 올바른 개체 수가 반환됩니다). 마지막으로

Private Sub sendObjects(Byval sales As List(Of Integer)) 
    For Each saleID As Integer in sales 
     AddHandler hlxService.SaveBankTransactCompleted, _ 
       AddressOf SaveBankTransactCompleted 

     hlxService.SaveBankTransactAsync(saleID) 
    End For 
End Sub 

Private Sub SaveBankTransactCompleted(
     sender As Object, 
     e As SaveBankTransactCompletedEventArgs) 
    RemoveHandler hlxService.SaveBankTransactCompleted, _ 
       AddressOf SaveBankTransactCompleted 

    saleCollection.add(e.Result) 

    ' Check if all objects have been returned. 
    CheckPaymentStatus() 
End Sub 

과 (간체) WCF 서비스 기능 :

<OperationContract()> 
Public Function SaveBankTransact(
     ByVal saleID as Integer) As hlxSale 
    Dim newSale as hlxSale 
    newSale = findSaleById(saleID) 
    ' Process some data from database, put values into newSale 

    Return newSale 
End Function 

우리는 주위에 방법을 발견

샘플은 아래의 문제 (단순화 된 버전이 아닌 실제 코드)를 설명하기 위해 문제는 컬렉션 전체를 보내고받는 것만으로도 원래 문제의 원인이 무엇인지 궁금해 할 것입니다.

+0

WCF에 어떤 바인딩을 사용합니까? –

+0

@ ArnonRotem-Gal-Oz basicHttpBinding은 ServiceReferences.ClientConfig의 내용입니다. –

답변

1

아마도 브라우저의 캐시가 서버로 나가는 호출을 막는 것입니다. 서버에서 만료를 설정해야합니다. 다음

C#입니다하지만

var nextCycle = DateTime.Now.AddSeconds(pollingInterval).ToUniversalTime(); 
var expires = nextCycle.ToString("ddd, dd MMM yyyy HH:mm:ss 'GMT'"); 
var headers = WebOperationContext.Current.OutgoingResponse.Headers; 
headers.Add(HttpResponseHeader.Expires, expires); 

또 다른 옵션이없는 캐시 헤더를 설정하는 것입니다 VB.NET에서 매우 비슷해야하지만 클라이언트

에 의한 남용을 방지 도움이 될 것입니다 만료가 더 낫다
+0

그러나 서비스에서 중단 점을 사용할 때 각 호출을 개별적으로 얻는 것처럼 보이므로 캐시에 걸려서는 안됩니다. –

+0

피들러 (http://www.fiddler2.com/fiddler2/)를 다운로드하고 문제가 서버에서 전송 된 내용인지 또는 클라이언트가 전화를 걸지 않는지 확인하십시오 –

+0

제안 해 주셔서 감사합니다. 아웃. 불행하게도 그것은 다음 주까지 기다려야 할 것이다. 그러나 나는 그것이 보여주는 것에 관해 당신에게 앙갚음을하려고 노력할 것이다. –