Пустой HttpContext при вызове веб-службы WCF - PullRequest
6 голосов
/ 11 ноября 2008

Недавно я написал веб-сервис для Silverlight, который использует членство и роли ASP.net.

Чтобы проверить клиента в сервисе, я смотрю на HTTPContext.Current.User (который работает, когда сервис вызывается из Silverlight)

Однако я пытался вызвать ту же услугу из постбэка asp.net. Но когда я перехожу к сервису, в HTTPContext.Current есть пустая строка для имени пользователя.

Полагаю, что-то, чего я не делаю в файле web.config, приводит к тому, что httpContext не отправляется через прокси в мою службу?

Любые идеи будут оценены. Мне нужно как-то проверить клиента, используя членство и роли asp.net, и заставить его работать как на клиенте asp.net, так и на клиенте silverlight.

Ответы [ 5 ]

2 голосов
/ 12 ноября 2008

Я решил это!

Похоже, что по умолчанию приложение Silverlight отправляло все файлы cookie браузера в службу. Одним из этих файлов cookie является файл cookie «.ASPXAUTH» для проверки подлинности на основе членства и ролей.

Однако приложение asp.net не отправляло куки в сервис. Чтобы отправить куки авторизации, я использовал следующий код перед вызовом моего метода веб-сервиса.

    using (OperationContextScope scope = new OperationContextScope(ws.InnerChannel))
    {
HttpRequestMessageProperty httpRequest = new HttpRequestMessageProperty();
OperationContext.Current.OutgoingMessageProperties.Add(HttpRequestMessageProperty.Name, httpRequest);

            HttpCookieCollection cc = Page.Request.Cookies;
            if (Request.Cookies[".ASPXAUTH"] != null)
            {
                HttpCookie aCookie = Request.Cookies[".ASPXAUTH"];
                String authcookieValue = Server.HtmlEncode(aCookie.Value);
                httpRequest.Headers.Add("Cookie: " + ".ASPXAUTH=" + authcookieValue);

            }
// Webservice call goes here
    }
1 голос
/ 11 ноября 2008

Вместо HTTPContext попробуйте ServiceSecurityContext.Current.PrimaryIdentity

0 голосов
/ 12 ноября 2008

Обновление:

Хорошо. Я посмотрел запрос HTTP Post с помощью Fiddler

Похоже, приложение Silverlight отправляет «State» с файлом авторизации, а мое приложение asp.net - нет.

Похоже, мне нужно отправить состояние + мой файл авторизации при вызове службы. Возможно, мне нужно будет сформулировать новый вопрос в ближайшее время ...

0 голосов
/ 11 ноября 2008

Я думаю, это может быть потому, что мой wcf сервис находится в моем проекте silverlight.web, и, возможно, они более дружелюбны, когда дело доходит до обмена.

Возможно, мне нужно прочитать больше о wcf и создать более четкое разделение проблем, настроив отдельный проект веб-сервиса?

0 голосов
/ 11 ноября 2008

Не знаю, как это работает с Silverlight, но не с ASP.Net, но для начала вот хороший пост в блоге о том, как настроить WCF для работы с поставщиками членства ASP.Net . Есть довольно много шагов, так что это может быть довольно легко пропустить настройку.

Как только вы все заработаете правильно, я думаю, что оба должны работать правильно.

...