2010-04-21 2 views
0

리디렉션을 수행하기 전에 일부 타사 제공 업체에 연락해야하는 이벤트가있어서 (전자 상거래 사이트에서 최종 지불 페이지로 생각 함) 관련 지연이 있습니다. 그 처리. 이러한 제 3 자 제공 업체가 두 번 이상 연락을받지 않는 것이 중요하며 때로는 참을성이없는 사용자가 페이지를 새로 고침 (따라서 데이터를 다시 제출) 할 수 있습니다. 일반적인 코드 구조는 다음과 같습니다 사용자가 페이지를 새로 고치는 경우Response.Redirect가 재발 방지 코드로 인해 실행되지 않음

If Session("orderStatus") <> 'processing' Then 

    Session("orderStatus") = 'processing' 

    DoThirdPartyStuffThatTakesSomeTime() 

    Response.Redirect("confirmationPage.asp", True) 

End If 

문제는의 Response.Redirect를이 (나머지 코드는 원본 제출에서 리디렉션하기 전에 실행에도 불구하고) 발생하지 않습니다. 새로운 제출은 우선 순위가 높은 브라우저 용 새 스레드를 만드는 것으로 보입니다. 제 3 자 공급자가 두 번째로 접촉하는 것을 방지하기 위해이 코드를 건너 뛰고 리디렉션이 없으므로 동일한 페이지로 다시 돌아옵니다. . 첫 번째 제출이 완료되기 전에 전체 두 번째 제출이 완료되었을 수 있습니다.

페이지의 후속 제출물을 모두 무시할 수 있지만 여전히 리디렉션 작업을 수행하는 방법에 대한 도움이 필요하십니까?

감사

당신이 if 구조에서 재 이동

답변

1

: 내가 찾은

If Session("orderStatus") <> 'processing' Then 

    Session("orderStatus") = 'processing' 

    DoThirdPartyStuffThatTakesSomeTime() 

End If 

Response.Redirect("confirmationPage.asp", True) 
+0

안녕하세요, 답변 해 주셔서 감사합니다. 불행히도 리디렉션은 타사의 작업이 완료된 후에 만 ​​발생할 수 있습니다. 나가서 그것을 옮기면, 두 번째 제출이 먼저 타격을 입히고 타사 물건이 완료되기 전에 리디렉션됩니다. – Marco

+0

그런 다음 'DoThirdPartyStuffThatTakesSomeTime()' 함수의 끝으로 이동하십시오. – Oded

+0

이미 있습니다 - 내 코드 샘플은 단지 설명입니다. 이는 두 개의 스레드가 두 가지 다른 방법으로 동시에 동일한 이벤트를 실행하는 것과 더 관련이 있습니다 (세션 변수 중지 코드가 두 번 실행 됨). 마지막 스레드가 브라우저가있는 곳에서 우선 순위가있는 반면, 먼저 우선 순위를 취해야합니다. – Marco

0

(추적 및 발사 있었는지 추적 및 세션 변수를 사용할 때 많이 포함) 좀 더 많은 연구와 조사 후 ASP.NET은 주어진 세션에 대한 요청을 자동으로 serialize하여 각 세션이 순서대로 실행되도록합니다. 그러나 (그리고 이것은 혼란 스럽습니다.) 브라우저에 전달 된 '응답'은 마지막 작업 수행 결과입니다 (이 작업이 브라우저가 이전 작업에 대한 응답을 받기 전에 시작된 것으로 가정). 그래서 위의 경우 제 1 요청에 의해 시작된 모든 제 3 자 코드는 두 번째 요청이 시작되기 전에 실행을 완료합니다. 모든 요청이 처리 완료되면 ASP.NET은 마지막 요청에서 IIS로 HTML을 전달합니다 (페이지의 새로 고침 일뿐입니다).

위의 Oded의 첫 번째 제안은 정확한 리디렉션을 이동하는 것에 대한 올바른 제안이었습니다. 나는 이것을 대답으로 표시했습니다.

관련 문제