2011-12-16 70 views
0

我试图通过Web方法将用户的帖子存储到访问数据库中。我想存储登录用户的用户名,用户的帖子和帖子日期时间。如何在ASMX webservice中获取用户名的用户ID

到目前为止,我可以通过硬编码存储现有的用户帖子。但我想存储任何登录用户的帖子。我被告知我需要获取用户名的用户名。

因此,我发现和尝试添加以下代码:

//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... 
    } 

} 

你能给我什么,我需要做的,或者用另一种方式去获得用户ID来建议用户名?

回答

2

你没有指出你有什么类型的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网络服务,我不认为这个memebership提供商将有任何有效的数据来操作。

如果是这种情况,您可能需要切换到WCF或实施WSE(不推荐)。

1

您得到的异常意味着myObject(当前用户)为null或myObject.ProviderUserKey为null。我建议,当你在myObject设置后到达断点时,你应该检查myObject的值并查看它是否为null。

取决于什么是实际上null影响你在哪里寻找问题。如果myObject为null,那么您需要查看代码以获取当前用户,并检查是否有人实际登录等。如果ProviderUserKey为空,请考虑您是否需要此ID,或者只需使用此ID直接使用用户名,检查会员提供商是否以任何有意义的方式实际提供该财产。

0

,而不是您可以直接使用此代码....

string UserID = MembershipUser.ProviderUserKey.ToString();