2012-01-13 2 views
0

실버 라이트 사용 WCF 서비스가 있는데 그 중 하나의 방법이 [STAOperationBehavior] 속성이 필요합니다. 사용자에 대한 사용자 정보 (폼 인증)에 액세스해야하지만 [STAOperationBehavior] 특성이 적용되는 동안 Membership.GetUser()가 실패합니다.[STAOperationBehavior] 특성을 사용하여 WCF 서비스의 사용자 정보 가져 오기

[STAOperationBehavior] 
    [OperationContract] 
    public string DoWork(int inputStuff) 
    { 
    Membership.GetUser();//Fails 
    } 

하지만

//NOT ON STA THREAD 
    [OperationContract] 
    public string DoWork(int inputStuff) 
    { 
    Membership.GetUser();//Works 
    } 

가 어떻게이 방법에서 사용자 정보에 액세스하거나 다른 사용자의 정보와 함께이 방법을 제공 할 수 있습니까?

답변

0

는 I 결국 STAOperationBehavior 속성을 제거하고 수동 STA 스레드의 방법을 실행함으로써이 문제를 해결 :

//NOT ON STA THREAD 
    [OperationContract] 
    public void DoWork(int inputStuff) 
    { 
     //Get the user info while we're not in an STA thread 
     var userDetails = Membership.GetUser(); 


     System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(delegate 
      { 
       //Do STA work in here, using the userDetails obtained earlier 
      })); 

     thread.SetApartmentState(System.Threading.ApartmentState.STA); 
     thread.Start(); 
     thread.Join(); 
    } 

비트 지저분하지만

그것을 수행하는 다른 방법을 발견
관련 문제