Ответ 1
Веб-службы по умолчанию не имеют сеанса. Добавить атрибут в WebMethod..
[WebMethod(EnableSession=true)]
public Login CurrentLogin .....
У меня есть класс входа, у которого есть функция: isCorrect(), которая принимает имя пользователя и пароль как два атрибута и asp.net WebService Чтобы разрешить использование AJAX.
LoginService.cs
public Login CorrectLogin(string username, string password)
{
Login thisLogin = Login.isCorrect(username, password);
int thisLoggedinUserID = thisLogin.LoggedinUserID;
if (thisLoggedinUserID != 0)
{
Session["loggedinUser"] = thisLoggedinUserID;
}
return thisLogin;
}
Когда я хочу установить значение Session["loggedinUser"] = thisLoggedinUserID
, эта ошибка возникает:
Object reference not set to an instance of an object.
Я не могу понять, что такое решение.
Веб-службы по умолчанию не имеют сеанса. Добавить атрибут в WebMethod..
[WebMethod(EnableSession=true)]
public Login CurrentLogin .....
Похоже, что объект Session имеет значение null. Вы уверены, что сеансы включены в ваше приложение?
Вот хороший учебник по регистрации и доступу
http://www.mikesdotnetting.com/Article/75/Simple-Login-and-Redirect-for-ASP.NET-and-Access
Его не сложно найти, я думаю, что вы делаете своего собственного провайдера. codeplex и т.д. также имеет пучок.
Сессии в Web-сервисах С# не работают. Несколько месяцев назад я сделал бы то же самое, что и вы, но я меняю систему. Теперь я использую идентификацию маркера (используя уровень персистентности): сначала вы должны войти в систему, и каждый раз, когда вы совершаете вызов, вы должны отправить токен в один параметр или заголовок мыла или что-то вроде этого. Я рекомендую использовать SSL всегда.
Другой вариант - идентифицировать каждый вызов веб-службы с логином и паролем в SOAPHeader и использовать SOAPExtension для аутентификации или не вызова пользователя. Этот метод действителен только для связи протокола SOAP, а не HTTP POST или HTTP GET.
Надеюсь, что это поможет.