現在ログインしているユーザーのユーザー名をSilverlightで取得することはできますか?ユーザーがWindowsOSを使用していて、SilverlightアプリケーションがInternetExplorerでホストされていると想定できます。 ASP.NETを使用してサーバー側からIDを取得することはできません。このSilverlightアプリケーションは、静的HTMLファイルでホストされます。
残念ながら、それは不可能だと思います。
Windows OS/IEを想定できるとおっしゃっていますが、Silverlight自体は確かにこれを想定していないため、現在ログオンしているユーザーの名前を取得するために通常利用できる通常の.NETメカニズムのほとんどはサブセット内に存在しません。 Silverlightアプリで利用可能なフレームワークの概要:
すなわち。
System.Net.CredentialCache.DefaultCredentials
System.Security.Principal.WindowsIdentity.GetCurrent().Name
Environment.UserName
これらはすべてSilverlightアプリケーション内では使用できませんが、(たとえば)Windowsフォームアプリケーションでは、これらの各メカニズムを使用できます。
SilverlightアプリケーションがWindows/IEプラットフォーム上で実行されるという保証はないので、それは本当に理にかなっていると思います。
ちなみに、この質問はここでも尋ねられました:
そのスレッドは、これを達成するためのネイティブな方法がないことを確認しているようです。次に、スレッドは、Silverlightアプリを「ホスト」しているASP.NETページから現在のASP.Netユーザー名を「挿入」することを提案します。クライアントのマシンのコンテキストで実行する前に、Silverlightアプリケーション自体に挿入します。もちろん、これが機能する場合でも、ASP.NETのフォームまたはWindowsベースの認証のいずれかからASP.Netユーザー名のみが提供され、notクライアントマシンの現在ログオンしているユーザーのWindowsユーザー名。
あなたはこの方法でなんとか得ることができます。
1)asp.netWebサービスアプリケーションを作成します。
2)Silverlightアプリケーションから呼び出すWebサービスとメソッドを実装します。
[WebMethod]
public string GetClientUserName()
{
return System.Web.HttpContext.Current.User.Identity.Name.ToString();
}
3)このWebサービスアプリケーションをWebサーバーにデプロイします。匿名ユーザーにこれへのアクセスを許可しないでください。
4)このサービスをSilverlightアプリケーションに追加します。 (サービス参照を追加)
5)これで、このメソッドを呼び出して、Silverlightアプリケーション全体からユーザー名を取得できます。
この質問に対する投票数の多い回答は私を助けませんでした。
ただし、ASP.NET Webサービスを使用すると、これは機能しました。
string userName =
System.ServiceModel.ServiceSecurityContext.Current.WindowsIdentity.Name;
そして、このブログエントリは私を正しい道に導いたものです:
ServiceReferences.ClientConfigには次のものが必要です。
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding ...>
<security mode="TransportCredentialOnly" />
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
そしてweb.configはこれを必要とします:
<system.web>
<authentication mode="Windows" />
<identity impersonate="false" />
</system.web>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding ...>
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
これらは、以前はIISのWebサービスに匿名アクセスを使用していたSilverlightアプリケーションに加える必要のある唯一の注目すべき変更です。
動作しているように見えるこのコード(YMMV)を共有すると思いました。これは、CraigTPの回答と彼が提供したリンクに触発されています。これが静的なWebページでの実行に関する部分に直接答えていないことは知っていますが、OPはAPSXの妥協を受け入れたようです。
Silverlightをホストする私のASPXページ:
<head>
<!-- ...snip... -->
<script runat="server" language="c#">
void Page_Load()
{
this.UsernameField.Value = User.Identity.Name;
}
</script>
</head>
<body>
<input type="hidden" ID="UsernameField" runat="server" />
<!-- ...snip... -->
</body>
私のSilverlightC#コードでは:
private string GetCurrentUserName()
{
HtmlDocument doc = HtmlPage.Document;
if (doc == null)
{
return string.Empty;
}
HtmlElement Elm = doc.GetElementById("UsernameField");
if (Elm == null)
{
return string.Empty;
}
return Elm.GetAttribute("value");
}
Environment
.GetFolderPath(Environment.SpecialFolder.Personal)
.Split(new[] { '\\' }, StringSplitOptions.RemoveEmptyEntries)[2];
//ではなく//System.IO.Path.DirectorySeparatorCharを使用したCodeMaverickの回答のわずかな改善//
環境.GetFolderPath(Environment.SpecialFolder.Personal).Split(new [] {System.IO.Path.DirectorySeparatorChar}、StringSplitOptions.RemoveEmptyEntries)[2];
さて、これがあなたがwcfなしでそれを得る方法です
http://www.codeproject.com/Articles/47520/Silverlight-Windows-User-Identity-Name
この投稿によると、javascriptでは不可能なので、運が悪いと思います: http://bytes.com/topic/javascript/answers/616501-how-get-windows-username-using-javascripts
それを行う実際の方法はないようです。