2012-01-13 9 views
0

Silverlight対応のWCFサービスがあります。の1つの方法では、[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(); 
    } 

少し厄介私はそれを

を行うための他の方法を発見しました
関連する問題