Я хочу, чтобы иметь возможность обнаруживать, когда пользователь подписывается на мое приложение с использованием пассивных переменных, поэтому я могу добавить их в свою базу данных, если это первый раз, когда я использую мое приложение. Прямо сейчас я подписываюсь на WSFederationAuthenticationModule.SignedIn, но я чувствую, что что-то упускаю. В основном я не уверен, что лучше всего подписаться на мероприятие, я получил его для работы внутри PostAuthenticateRequest, но его немного взломало. Какие-либо предложения?Какое место лучше всего обнаружить при вводе пользователя при использовании azure acs и mvc3?
этот код из global.asax
public override void Init()
{
base.Init();
PostAuthenticateRequest += (s, e) =>
{
try
{
FederatedAuthentication.WSFederationAuthenticationModule.SignedIn -= SignedIn;
}
finally
{
FederatedAuthentication.WSFederationAuthenticationModule.SignedIn += SignedIn;
}
};
}
private void SignedIn(object sender, EventArgs e)
{
//do something
}
EDIT:
На данный момент я собираюсь использовать переменную флаг, чтобы убедиться, что я только один раз подписаться SignedIn. Если у кого-то нет других предложений, то есть :) спасибо за помощь Сандрино. Вот что я сейчас имею в виду.
private static bool isFirstRequest = true;
public override void Init()
{
base.Init();
PostAuthenticateRequest += (s, e) => {
if (isFirstRequest)
{
FederatedAuthentication
.WSFederationAuthenticationModule.SignedIn += SignedIn;
isFirstRequest = false;
}
};
}
private void SignedIn(object sender, EventArgs e)
{
//do something
}
EDIT: Чуть подробнее. Эта проблема возникает, если я использую эмулятор azure, вероятно, это происходит при развертывании, но я этого не пробовал. Я тестировал, если я просто не могу отлаживать, пытаясь записать в текстовый файл, и текстовый файл не был создан.
Я попытался это сделать, но WsFederationAuthenticationModule имеет значение null при запуске приложения, но доступен внутри запроса postauthenticate.Я считаю, что моя веб-конфигурация верна, я не редактировал ее вручную, чтобы добавить wsfederationmodule, просто использовав ссылку на ссылку sts. –
Я адаптировал образец кода, это правда, что WSFederationAuthenticationModule не сразу доступен, когда приложение запускается. –
Это все еще не работает, WsFederationAuthenticationModule доступен в этом случае, но подписка на событие signedin не влияет, и все свойства модулей пустые. Возможно, доступный модуль имеет только начальное значение, а дальше по конвейеру заменяется новый экземпляр. Я собираюсь просто поместить переменную flag в global.asax и использовать ее, чтобы заставить signedin только подписаться на один раз. Я собираюсь изменить свой вопрос, чтобы отразить новый метод. –