2008-11-10 2 views
6

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

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

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

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

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

+0

Можете ли вы объяснить немного больше о том, откуда происходят вызовы ASP.NET? Это в том же контексте, что и служба? Заставляете ли вы заходить на сайт, прежде чем попасть в службу? – Bryant 2008-11-10 23:46:28

+0

Они регистрируются на сайте (хотя они могут просматривать без входа в систему) Я вызываю службу во время обратной передачи. Я могу посмотреть HttpContext в postback, который заполнен зарегистрированным пользователем. Но на стороне обслуживания HttpContext пуст. – JSmyth 2008-11-11 01:37:11

ответ

0

Не уверен, как он работает из Silverlight, но не ASP.Net, но для начинающих здесь хорошо blog post on how to setup WCF to work with ASP.Net membership providers. Есть довольно много шагов, поэтому это может быть довольно легко пропустить настройку.

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

0

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

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

1

Вместо HttpContext попробовать ServiceSecurityContext.Current.PrimaryIdentity

0

Update:

Ok я взглянули на просьбу HTTP сообщение с помощью Fiddler

Похоже Silverlight приложение посылает ' State 'с авторизацией cookie и моим asp.net-приложением нет.

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

2

Я решил!

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

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

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 
    }