0

Silverlight対応の WCF サービスがありますが、そのうちの 1 つのメソッドには [STAOperationBehavior] 属性が絶対に必要です。ユーザーのユーザー詳細 (フォーム認証) にアクセスする必要がありますが、[STAOperationBehavior] 属性が適用されている間、Membership.GetUser() は失敗します。

すなわち

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

しかし

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

このメソッドでユーザー情報にアクセスするにはどうすればよいですか? または、このメソッドにユーザーの情報を提供するにはどうすればよいですか?

4

1 に答える 1

0

最終的に、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();
    }

少し面倒ですが、他に方法が見つかりませんでした

于 2012-01-15T23:58:50.607 に答える