Это должно просто работать.Я прочитал все статьи, которые я мог найти через google по этой теме, пытался скопировать столько, сколько я мог, из других статей как в StackOverflow, так и в CodeProject и других, но независимо от того, что я пытаюсь - это не работает.
У меня есть приложение silverlight, которое нормально работает с использованием аутентификации Windows.
Чтобы запустить его при аутентификации с помощью форм, я:
Отредактировал файл web.config для включения аутентификации с помощью форм (и удалите конфигурацию проверки подлинности Windows):
<authentication mode="Forms">
<forms name=".ASPXAUTH" loginUrl="logon.aspx" defaultUrl="index.aspx" protection="All" path="/" timeout="30" />
</authentication>
Создайте стандартный код logon.aspx и logon.aspx.cs за страницей для ввода имени и пароля пользователя и создания файла cookie для проверки подлинности при входе в систему.успешно, а затем перенаправил пользователя на корневую страницу веб-сайта, которая является приложением silverlight:
private void cmdLogin_ServerClick( object sender, System.EventArgs e )
{
if ( ValidateUser( txtUserName.Value, txtUserPass.Value ) )
{
FormsAuthentication.SetAuthCookie(txtUserName.Value, true);
var cookie = FormsAuthentication.GetAuthCookie(txtUserName.Value, true);
cookie.Domain = "mymachine.mydomain.com";
this.Response.AppendCookie(cookie);
string strRedirect;
strRedirect = Request["ReturnUrl"];
if ( strRedirect == null )
strRedirect = "index.aspx";
Response.Redirect( strRedirect, true );
}
}
Таким образом, перенаправление после успешного входа в систему запускает мое приложение silverlight.
Однакопользователь не аутентифицирован при выполнении кода запуска Silverlight:
public App()
{
InitializeComponent();
var webContext = new WebContext();
webContext.Authentication = new FormsAuthentication();
ApplicationLifetimeObjects.Add( webContext );
}
private void ApplicationStartup( object sender, StartupEventArgs e )
{
Resources.Add( "WebContext", WebContext.Current );
// This will automatically authenticate a user when using windows authentication
// or when the user chose "Keep me signed in" on a previous login attempt
WebContext.Current.Authentication.LoadUser(ApplicationUserLoaded, null);
// Show some UI to the user while LoadUser is in progress
InitializeRootVisual();
}
TОшибка возникает в методе ApplicationUserLoaded, который всегда имеет для свойства HasError значение true при входе в метод.
private void ApplicationUserLoaded( LoadUserOperation operation )
{
if((operation != null) && operation.HasError)
{
operation.MarkErrorAsHandled();
HandlerShowWebServiceCallBackError(operation.Error, "Error loading user context.");
return;
}
...
}
Ошибка, о которой сообщается, выглядит следующим образом - из того, что мне кажется, что пользователь не являетсяне считается аутентифицированным при входе в приложение silverlight, поэтому он направляет код, чтобы попытаться вернуть страницу входа, которая возвращает данные, неожиданные для приложения silverlight:
An exception occurred while attempting to contact the web service.
Please try again, and if the error persists, contact your administrator.
Error details:
Error loading user context.
Exception details:
Load operation failed for query 'GetUser'. The remote server returned an error: NotFound.
Есть идеи?
Исходя из всего, что я прочитал, это должно быть довольно просто и просто работать - поэтому я, очевидно, делаю очень простую ошибку.
Мне интересно, если после аутентификации пользователя в моем логиневеб-странице .aspx, мне нужно каким-то образом передать аутентифицированный экземпляр WebContext со страницы входа в мое приложение silverlight вместо создания нового экземпляра в коде запуска приложения silverlight - но я не знаю, как это сделать.
Цените любые или все предложения.