質問

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
    }

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

役に立ちましたか?

解決

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

少し乱雑ですが、私はそれをする他の方法を見つけませんでした

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top