#asp.net #silverlight #wcf #security
#asp.net #silverlight #wcf #Безопасность
Вопрос:
У меня есть ASP.NET веб-приложение, включающее несколько страниц silverlight. Во-первых, пользователи проходят аутентификацию с использованием общего ASP.NET веб-форма.
Это был бы типичный код для этого:
FormsAuthentication.SetAuthCookie(this.txtUsername.Text, false);
FormsAuthentication.RedirectFromLoginPage(this.txtUsername.Text, false);
Response.Redirect("~/Private/Index.aspx");
Далее пользователь переходит на страницу, которая содержит страницу Silverlight. С этой страницы silverlight мне нужно безопасно вызвать некоторые службы WCF.
Сервис содержит этот код:
[ServiceContract(Namespace = "http://mydomain")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class ServiceWCF
{
public ServiceWCF()
{
System.ServiceModel.Web.WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
Thread.CurrentPrincipal = HttpContext.Current.User;
}
[OperationContract]
[PrincipalPermission(SecurityAction.Demand, Authenticated = true)]
public List<Data> GetData()
{
// do things
}
}
И именно так я вызываю этот метод из клиента silverlight:
MyWCFReference.ServiceWCFClient proxy = new MyWCFReference.ServiceWCFClient();
proxy.GetDataCompleted = new EventHandler<MyWCFReference.GetDataCompletedEventArgs>(proxy_GetDataCompleted);
proxy.GetDataAsync();
Я следил за этой статьей, чтобы защитить свои веб-сервисы:
http://netpl.blogspot.com/2010_04_01_archive.html
Но когда я запускаю свой код, я получаю сообщение об ошибке: ошибка запроса основного разрешения.
Есть идеи о том, как это решить? Спасибо!!
Ответ №1:
Вероятно, вам потребуется настроить clientaccesspolicy.xml
или crossdomain.xml
файл в корневом каталоге домена, где размещена служба WCF, чтобы разрешить доступ к вашему приложению Silverlight.
Смотрите эту страницу MSDN для получения полной информации.
Комментарии:
1. @xus — Ну что ж. Возможно, было бы неплохо добавить свой код, который пытается установить соединение.
2. проблема заключалась в том, что службы WCF находились в другом проекте (в одном и том же решении). Я переместил службы WCF в asp.net проект, и теперь он работает 🙂