2011-08-17 7 views
1

WCF 요청시 메시지 헤더에서 데이터를 선택하는 인터셉터가 있습니다. 아래를 참조 HttpContext.Current.Items에 액세스하는 WCF에서 정적 메서드를 사용할 수 있습니까?

public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext) 
{ 
    _CurrentRequest = request; 
    SetupSecurityPrincipal(); 
    ThreadExtension.PersonID = GetIntHeader(HeaderKeys.PersonID); 
    return null; 
} 

ThreadExtension

가 (이름을 무시 아무 의미하는 것은) HttpContext.Current로 설정 GET을 제공/정적 속성을 가진 클래스이다. 아래를 참조하십시오 : 우리가 또 다른 한 사람의 데이터의 결과로, 함께 충분히 가까이 일 2 개 요청이있는 경우 그래서 문제가 우리의 웹 요청에
public class ThreadExtension 
{ 
    public static int? PersonID 
    { 
     get { return (int?)HttpContext.Current.Items["PersonID"]; } 
     set { HttpContext.Current.Items["PersonID"] = value; } 
    } 
} 

우리의 WCF 웹 서비스에 ThreadContext 변화, 때로는 정보를 종료 사람의 세션.

제 질문은 무엇이 잘못 되었습니까? 여기서 정적 속성을 사용하는 것이 올바른 방법이 아닌가? 이상적으로는 WCF의 요청에 묶여있는 무언가가 필요하기 때문에 항상 데이터를 전달하지 않고 몇 군데에 도착할 수 있습니다.

제공 할 수있는 도움이나 조언을 보내 주시면 대단히 감사하겠습니다.

+0

왜 세션 정적 인 경우 해당 정적 정적? – Yahia

+0

우리는 모든 통화에 대해 값을 전달하지 않고 해당 사람의 통화 평생 동안 해당 값에 액세스하려고합니다. 이 잘못 생각할 수도 있지만 내 인상은 정적 속성은 HttpContext에 통과하는 것입니다. 더 좋은 방법이 있습니까? –

+1

WCF에서 세션을 사용하고 있습니까 (예 : netTCP 바인딩 포함)? "PersonID"를 통화하는 동안 어떻게 관련이 있습니까? 'HttpContext.Current.Items [ "PersonID"]'를 직접 사용하지 않는 이유는 무엇입니까? – Yahia

답변

2

용의자 라인은 다음과 인스턴스 변수 효과적으로 정적 있도록

_CurrentRequest = request; 

WCF 메시지 검사 일반적 싱글이다. 이것을 설정 한 다음 클래스의 다른 위치에서 헤더를 읽으면 현재보고있는 비 결정적 동작으로 이어질 것입니다.

+2

그래, 그게 효과가있다. 무작위로 낯선 사람 고맙습니다. –

관련 문제