Получить информацию о пользователе в WCF-сервисе с атрибутом [STAOperationBehavior] - PullRequest
0 голосов
/ 14 января 2012

У меня есть WCF-служба с поддержкой silverlight, один из методов которой обязательно требует атрибут [STAOperationBehavior].Мне нужно получить доступ к данным пользователя (проверка подлинности с помощью форм) для пользователя, но членство.GetUser () завершается ошибкой, когда применяется атрибут [STAOperationBehavior].

т.е.

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

, но

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

Как я могу получить доступ к информации о пользователе в этом методе или иным образом предоставить этому методу информацию о пользователе?

1 Ответ

0 голосов
/ 16 января 2012

В конце концов я решил эту проблему, удалив атрибут 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();
    }

Немного грязно, но я не нашел другого способа сделать это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...