0

我有一个启用 silverlight 的 WCF 服务,其中一种方法绝对需要[STAOperationBehavior] 属性。我需要访问用户的用户详细信息(表单身份验证),但在应用 [STAOperationBehavior] 属性时 Membership.GetUser() 失败。

IE

    [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 回答