2011-12-16 7 views
0

Webメソッドを使用してユーザーの投稿をアクセスデータベースに保存しようとしています。ログインしたユーザーのユーザー名、ユーザーの投稿、およびポスト日時を保存します。ASMX webserviceでusernameのuserIDを取得する方法

これまでのところ、ハードコーディングで既存のユーザー投稿を保存できます。しかし、私はログインしているユーザーの投稿を保存したい。私はusernameの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... 
    } 

} 

あなたは私に私が何をする必要があるかの提案を与えることができ、またはのためのユーザーIDを取得について移動する別の方法ユーザー名?

答えて

2

メンバーシップの種類を指定していませんが、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のWebサービスでは、私はメンバーシッププロバイダが動作するための有効なデータを持っているとは思わない。

この場合、おそらくWCFに切り替えるか、WSEを実装する必要があります(推奨しません)。

1

例外は、myObject(現在のユーザー)がnullまたはmyObject.ProviderUserKeyがnullであることを意味します。 myObjectが設定された後にブレークポイントに到達すると、myObjectの値を調べてnullかどうかを確認することをお勧めします。

実際にはnullに依存して、問題を探す場所に影響します。 myObjectがnullの場合、コードを見て現在のユーザーを取得し、誰かが実際にログインしているかどうかなどを確認する必要があります。ProviderUserKeyがnullの場合は、このIDが必要かどうか、ユーザー名を直接使用して、メンバシッププロバイダが実際にそのプロパティを意味のある方法で提供しているかどうかを確認します。

0

代わりにあなたが

string UserID = MembershipUser.ProviderUserKey.ToString(); 
....直接このコードを使用することができます
関連する問題