2011-12-16 120 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();