2009-09-01 20 views
10

Estoy tratando de encontrar la forma de que un cliente de Silverlight conozca la dirección IP del usuario actual. He visto esta información de manera similar anteriormente, pero en referencia a pasarla de vuelta al servidor, que es diferente de mi propósito.Cómo hacer que el cliente de Silverlight tenga conocimiento de la dirección IP del usuario

Estoy tratando de escribir una aplicación simple que cambie la fuente de MediaElement dependiendo de la dirección IP del usuario. Por lo tanto, la dirección IP solo es necesaria en el lado del cliente.

¿Hay alguna manera de averiguar la dirección IP sin utilizar un servicio web? Si debo usar un servicio web, ¿cuál sería bueno usar?

Respuesta

6

Después de trabajar en este proyecto por un tiempo, creo que encontré una solución más simple cuando se aloja en una página de 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> 

me gusta mucho más el uso de initParams con el ASP <%=Request ... directamente en el código de jugar con el JavaScript para modificar un control dentro de la aplicación Silverlight. Después de pasarlo a InitParams, puede cargar los valores en el Diccionario de recursos de la aplicación. Voy a entrar en detalles de todo esto en mi publicación de blog: Pass the IP Address of a User to Silverlight as a Parameter(NOTA: Si el enlace a mi sitio web en benmccormack.com no funciona, puede que tenga que ir directamente al sitio y encontrarlo. -up el 26/9/2009).

+2

Para agregar a esta respuesta, puede encontrar la variable en Silverlight en el método 'Application_Startup' de' App.xaml.cs', en 'e.InitParams ["txtUserIP"] ' – Rachel

+0

¿cómo puedo hacer esto usando una página html en lugar de asp.net? – nhenrique

1

Tiene aa pice de código en el archivo aspx aloja el control Silverlight

var = ip '<% = Request.UserHostAddress%>'

proceso de carga y luego su conexión y ajuste la ip a su clase de Silverlight

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" /> 

si su página de acogida Silverlight está alojado en Apache intenta Thisan servidor Apache:

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

Aprendí a pasar una variable a la aplicación Silverlight. Tuve que agregar un elemento en mi XAML para tener un lugar donde poner la dirección IP. Sin embargo, solo devolvió 127.0.0.1. –

+0

¿Estás depurando nuestra aplicación? Intenta alojar la aplicación en otra máquina que no sea la que estás accediendo desde – rravuri

+0

Gracias por la sugerencia. Lo intenté alojándolo en IIS en mi PC de trabajo. De hecho, obtuve mejores resultados de esa manera. Está mostrando la dirección IP "detrás del cortafuegos", pero creo que esto funcionará para mis necesidades. Cuando accedo a través de la VPN, obtengo mi dirección de cliente VPN. Desde mi PC de trabajo, obtengo mi IP interna. Guay. Debería poder trabajar con esto. ¡Muchas gracias! –

2

No puede obtener la dirección IP de la máquina del cliente utilizando cualquier mechansims del lado del cliente (javascript, silverlight, etc.).

Michale Sync publicó un interesante artículo sobre cómo recuperar la información del cliente de silverlight .. silverlight-2-beta1-url-referrer-screen-resolution-clients-data-time-and-ip-address.

este approch debería funcionar .. Pero también hay limitación

No será capaz de obtener la dirección real si el servidor proxy está ocultando esas direcciones.

Cuestiones relacionadas