2012-05-24 4 views
1

나는 다음과 같은 링크AJAX 환경

http://blogs.msdn.com/b/silverlightws/archive/2009/09/30/having-a-pollingduplex-service-and-any-other-wcf-service-in-the-same-website-causes-silverlight-calls-to-be-slow.aspx

에서 설명하고 해결하는 데 문제가있어 가능하게하는 ASP.NET 호환성/세션에서 하위 필연의 AJAX 서비스 요청을 차단 접근 장기 실행 서비스 작업 .. 하지만 나는 자바 라이트와 실버 라이트를 사용하지 않기 때문에 권장 된 솔루션 (클라이언트 HTTP 스택 사용)을 사용할 수 없다!

POST /PollingWcfServices/ServiceWcf.svc HTTP/1.1 
Accept: */* 
Content-Length: 564 
Content-Type: application/soap+xml; charset=utf-8 
Accept-Encoding: gzip, deflate 
User-Agent: Mozilla/4.0 
Host: foo 
Connection: Keep-Alive 
Pragma: no-cache 
Cookie: ASP.NET_SessionId=iyr4sf55rm1kypafjdvlhm55 

다음 폴링 코드는 세션이 쿠키에 설정되어 있기 때문에 불행히도, 서버가 시도하고 공정 동일한 세션 서비스가 순차적으로 호출

request.onreadystatechange = function() { 
      if (request.readyState == 4) { 
       if (request.status == 200) 
        //Process and Poll again 
       else 
        //Handle errors 
      } 

    request.open("POST", url);    
    request.setRequestHeader("Content-Type", "application/soap+xml;charset=utf-8"); 
    request.send(httpBody); 

을 사용한다. 이것은 긴 투표 과정에서 큰 문제입니다. 간단한 해결책은 Silverlight 클라이언트 스택을 사용하여 Silverlight 폴링처럼 보이도록 헤더에서 쿠키를 제거하는 것입니다.

request.setRequestHeader는 헤더 값에만 추가합니다. 이것은 쿠키가 .send의 머리에 설정되어있는 것처럼 보이기 때문에 어떤 차이도없는 것처럼 보입니다.

모질라 유일한 해결책은, SEM은 어느 ASP.NET_SessionId의 쿠키를 제거하지 않습니다

http://www.michael-noll.com/tutorials/cookie-monster-for-xmlhttprequest/

request.channel.loadFlags |= Ci.nsIRequest.LOAD_ANONYMOUS;

에서 발견했다. 그것이 ASPXAUTH 쿠키를 제거하더라도.

누구나 ASP.NET 호환성/세션 사용 환경에서 하위 AJAX 서비스 요청을 차단하지 않는 AJAX 액세스 가능한 장기 실행 서비스 작업에 대한 해결책이 있습니까? 답은 여기에있다

답변

2

...

.NET 4에서, 당신이 Application_BeginRequest

경우 (Context.Request.Path.EndsWith ("xxx.svc")) 을 수행 할 수 있습니다 Context.SetSessionStateBehavior (SessionStateBehavior.ReadOnly);

- 콜백 서비스의 SessionStateBehavior을 변경하여 How to force an IIS hosted WCF or ASMX [webservice] to use session object readonly?

, 내가 방해를이 서비스는 비 순차적 실행되도록 분리 및 정지 할 수 있었다.

감사합니다. Cine (https://stackoverflow.com/users/264022/cine)