Windows 認証を使用する Silverlight ビジネス アプリケーションを使用しています。
ユーザーがマシンにサインインし、Silverlight URL にアクセスすると、表示されるデータは Windows サインインの詳細に基づいています。ユーザー名は、次のようにページのログイン ステータスから取得されます。
string fullUserName = WebContext.Current.User.DisplayName;
string userName = fullUserName.Substring(fullUserName.IndexOf('\\') + 1);
たとえば、fullUserName
ここでは 'machineName\UserName' になり、2 行目で 'machineName\' を削除して、ユーザー名だけを残します。
ユーザー名がページから抽出されると、Web サービス呼び出しで使用され、そのユーザー アカウントに基づいてデータが返されます。
void OnLoad(object sender, RoutedEventArgs e)
{
string fullUserName = WebContext.Current.User.DisplayName;
string userName = fullUserName.Substring(fullUserName.IndexOf('\\') + 1);
WebService.Service1SoapClient client = new WebService.Service1SoapClient();
client.IDReturnCompleted += new EventHandler<IDReturnCompletedEventArgs>(client_IDReturnCompleted);
client.IDReturnAsync(userName);
}
これは、読み込まれたときに最初のページであるホームページを除いて、Silverlight のすべてのページで正常に機能します。これは、コールバックが非同期であるため、ユーザー名の値がまだ初期化されていないためだと思います。しかし、ユーザーが新しいリンクをクリックするまでに、値は読み込まれています。
ホームページでこの値を取得することは可能ですか? ホームページの load イベントと InitializeComponent の両方で試しましたが、値はまだ Web サービスから返されていません。