2009-09-01 33 views
10

Silverlightクライアントに現在のユーザーのIPアドレスを認識させる方法を見つけようとしています。私はこの情報を以前と同じように見たことがありますが、私の目的とは異なるサーバーに戻すことを参照しています。SilverlightクライアントにユーザーのIPアドレスを認識させる方法

私は、ユーザーのIPアドレスに応じてMediaElementのソースを変更する簡単なアプリケーションを作成しようとしています。したがって、IPアドレスはクライアント側でのみ必要です。

Webサービスを使用せずにIPアドレスを見つける方法はありますか? Webサービスを使用する必要がある場合は、どちらを使用するのが良いでしょうか?

答えて

6

このプロジェクトではしばらくの間、ASP.netページ内でホストされた方が簡単な解決策を見つけたと思います。

<body> 
    <form id="form1" runat="server" style="height:100%"> 
    <div id="silverlightControlHost"> 
     <object id="SilverlightPlugin" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%"> 

     <param name="source" value="ClientBin/VideoPlayer.xap"/> 
     <param name="onload" value="onload" /> 
     <param name="initParams" value="txtUserIP=<%=Request.UserHostAddress %>,cc=true,m=/relative"/> 
     <param name="onError" value="onSilverlightError" /> 
     <param name="background" value="white" /> 
     <param name="minRuntimeVersion" value="3.0.40624.0" /> 
     <param name="autoUpgrade" value="true" /> 
     <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0" style="text-decoration:none"> 
     <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none"/> 
     </a> 
     </object>  
    </div> 
    </form> 
</body> 

私は多くのSilverlightアプリケーション内の制御を変更するためにはJavaScriptをいじりよりも、直接コードに... ASP <%=RequestとinitParamsを使用して好みます。 InitParamsに渡した後、その値をアプリケーションのリソースディクショナリにロードできます。 Pass the IP Address of a User to Silverlight as a Parameter(注:私のウェブサイトへのリンクがbenmccormack.comでうまくいかない場合は、直接サイトにアクセスして見つけなければならない場合があります。 -up on 9/26/2009)

+2

この答えに追加するには、 'App.xaml.cs'の' Application_Startup'メソッドの変数を 'e。InitParams ["txtUserIP"] ' – Rachel

+0

asp.netではなくhtmlページを使用してこれを行うにはどうすればよいですか? – nhenrique

1

は、Silverlightコントロールをホスト

するvar IP = '<% = Request.UserHostAddress%>' あなたのaspxファイルに

をコードするAA PICEを持って、その後フックアップのonloadイベントとあなたのSilverlightのクラスにIPを設定します

function onload() { 
      control = document.getElementById(
        'SilverlightPlugin' 
       ); 
      iptextblock = control.Content.FindName("txtIP"); 
      iptextblock.Text = ip; 
     } 

<object id="SilverlightPlugin" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%"> 
    <param name="source" value="ClientBin/SilverlightApplication1.xap"/>  
    <param name="onload" value="onload" /> 

あなたのSilverlightのホストページは、Apacheの中でホストされている場合は、thisan Apacheサーバを試してみてください。

var ip = '<!--#echo var="REMOTE_ADDR"-->'; 
+0

変数をSilverlightアプリケーションに渡す方法を学びました。私はXAMLにIPアドレスを入れる場所を持つために要素を追加しなければなりませんでした。しかし、それは127.0.0.1を返すだけでした。 –

+0

あなたのアプリケーションをデバッグしていますか? – rravuri

+0

からアクセスしているマシン以外のマシンで、このアプリケーションをホストしようとしていますか?ありがとうございました。私はちょうど私の仕事のPCのIISでそれをホストすることによってそれを試みた。私は実際にはより良い結果を得ました。 「ファイアウォールの背後にある」IPアドレスが表示されていますが、これが私のニーズに対応すると思います。 VPNを介してアクセスすると、VPNクライアントのアドレスが取得されます。私の仕事のPCから、私は私の内部IPを取得します。クール。私はこれで作業できるはずです。本当にありがとう! –

2

クライアント側のmechansim(javascript、silverlightなど)を使用してクライアントマシンのIPアドレスを取得することはできません。

Michale Syncは、シルバーライトからクライアント情報を取得する方法について興味深い記事を投稿しました。silverlight-2-beta1-url-referrer-screen-resolution-clients-data-time-and-ip-address

このapprochは仕事..しかし、また、プロキシサーバが これらのアドレスを隠している場合、実際の アドレスを取得することができなくなります

は限界があるはずです。

関連する問題