Как получить ID пользователя для имени пользователя в веб-сервисе ASMX - PullRequest
0 голосов
/ 16 декабря 2011

Я пытаюсь сохранить запись пользователя в базе данных доступа через веб-метод.Я хочу сохранить имя пользователя вошедшего в систему, сообщение пользователя и дату и время публикации.

Пока что я могу сохранить существующую запись пользователя с помощью жесткого кодирования.Но я хочу хранить сообщения любых зарегистрированных пользователей.Мне сказали, что мне нужно получить userID для имени пользователя.

Таким образом, я нашел и попытался добавить следующие коды:

//GetUser() returns current user information
MembershipUser user = Membership.GetUser();

//Returns the UserID and converts to a string
string UserID = user.ProviderUserKey.ToString();

Когда я попытался отладить с помощью точек останова, первыйХорошо.Но для второго, VS 2010 сказал, что «ссылка на объект не установлена ​​на экземпляр объекта».Как мне это исправить?

VS предложил добавить «новый», который не работал.Он также предложил перехватить NullReferenceException, но я не знаю, как использовать предоставленные коды:

public class EHClass
{
    void ReadFile(int index)
    {
        // To run this code, substitute a valid path from your local machine
        string path = @"UsersDB_in_App_Data";
        System.IO.StreamReader file = new System.IO.StreamReader(path);
        char[] buffer = new char[10];
        try
        {
            file.ReadBlock(buffer, index, buffer.Length);
        }
        catch (System.IO.IOException e)
        {
            Console.WriteLine("Error reading from {0}. Message = {1}", path, e.Message);
        }

        finally
        {
            if (file != null)
            {
                file.Close();
            }
        }
        // Do something with buffer...
    }

}

Можете ли вы дать мне подсказки о том, что мне нужно сделать, или альтернативный способ полученияuserID для имени пользователя?

Ответы [ 3 ]

2 голосов
/ 16 декабря 2011

Вы не указали, какой тип MembershipUser у вас есть, но ProviderUserKey полностью зависит от основного хранилища данных.

Например, поставщик членства sql сохраняет это значение как GUID.

Если существует вероятность того, что это свойство не будет содержать никаких полезных данных, вам необходимо проверить его на наличие, прежде чем получить к нему доступ:

//Returns the UserID and converts to a string
string UserID;
if ((myObject != null) && (myObject.ProviderUserKey != null)) {
    UserId = myObject.ProviderUserKey.ToString();
} else {
    UserId = String.Empty;
}

Кроме того, если вы не используете WSE в прямом веб-сервисе asmx, я не думаю, что поставщик услуг членства будет иметь какие-либо действительные данные для работы.

Если это так, вам, вероятно, придется переключиться на WCF или внедрить WSE (НЕ рекомендуется).

1 голос
/ 16 декабря 2011

Исключение, которое вы получаете, означает, что либо myObject (текущий пользователь) имеет значение null, либо myObject.ProviderUserKey имеет значение null. Я бы посоветовал, что когда вы достигнете точки останова после установки myObject, вы должны проверить значение myObject и посмотреть, является ли оно пустым.

В зависимости от того, что на самом деле является нулем, влияет на то, где вы ищете проблему. Если myObject имеет значение null, вам нужно посмотреть на код, чтобы получить текущего пользователя, и проверить, действительно ли кто-то вошел в систему и т. Д. используя имя пользователя напрямую, проверьте, действительно ли поставщик членства предоставляет это свойство осмысленным образом.

0 голосов
/ 16 декабря 2011

вместо этого вы можете использовать этот код напрямую ....

string UserID = MembershipUser.ProviderUserKey.ToString();
...