2009-09-01 20 views
10

Sto cercando di capire come rendere un client Silverlight consapevole dell'indirizzo IP dell'utente corrente. Ho visto questa informazione in modo simile prima, ma in riferimento al suo ritorno al server, che è diverso dal mio scopo.Come rendere il client Silverlight a conoscenza dell'indirizzo IP dell'utente

Sto provando a scrivere una semplice app che modifica l'origine di MediaElement a seconda dell'indirizzo IP dell'utente. Quindi, l'indirizzo IP è necessario solo sul lato client.

C'è un modo per scoprire l'indirizzo IP senza utilizzare un servizio web? Se devo usare un webservice, quale sarebbe utile usare?

risposta

6

Dopo aver lavorato a questo progetto per un po ', penso di aver trovato una soluzione più semplice quando ospitato in una pagina 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> 

preferisco di gran lunga utilizzando initParams con l'ASP <%=Request ... direttamente nel codice di scherzi con il codice JavaScript per modificare un controllo all'interno della Silverlight App. Dopo averlo passato in InitParams, è possibile caricare i valori nel Dizionario delle risorse dell'applicazione. Vado nel dettaglio di tutto questo sul mio post del blog: Pass the IP Address of a User to Silverlight as a Parameter(NOTA: se il collegamento al mio sito Web all'indirizzo benmccormack.com non funziona, potrebbe essere necessario andare direttamente al sito e trovarlo. -up il 26/09/2009).

+2

Per aggiungere a questa risposta, è possibile trovare la variabile in Silverlight nel metodo 'Application_Startup' di' App.xaml.cs', in 'e.InitParams ["txtUserIP"] ' – Rachel

+0

come posso farlo usando una pagina html invece di asp.net? – nhenrique

1

Avere aa pice di codice nel file aspx che ospita il controllo silverlight

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

poi collegamento evento onload e impostare l'ip alla classe 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" /> 

se la pagina host Silverlight è ospitato in Apache si tenta Thisan server Apache:

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

Ho imparato a passare una variabile all'app Silverlight. Ho dovuto aggiungere un elemento nel mio XAML per avere un posto dove inserire l'indirizzo IP. Tuttavia, ha restituito solo 127.0.0.1. –

+0

Stai eseguendo il debug della nostra app per provare ad ospitare l'app su un'altra macchina diversa da quella a cui stai accedendo da – rravuri

+0

Grazie per il suggerimento. L'ho appena provato ospitando su IIS il mio PC di lavoro. In realtà ho ottenuto risultati migliori in questo modo. Mostra l'indirizzo IP "dietro il firewall", ma penso che funzionerà per le mie esigenze. Quando accedo tramite VPN, ottengo il mio indirizzo client VPN. Dal mio PC di lavoro, ottengo il mio IP interno. Freddo. Dovrei essere in grado di lavorare con questo. Molte grazie! –

2

Non è possibile ottenere l'indirizzo IP della macchina client utilizzando qualsiasi lato meccanico del client (javascript, silverlight ecc.).

Michale Sync ha pubblicato un articolo interessante su come recuperare le informazioni sul client da Silverlight .. silverlight-2-beta1-url-referrer-screen-resolution-clients-data-time-and-ip-address.

questo approch dovrebbe funzionare .. Ma c'è anche la limitazione

Non sarà in grado di ottenere l'indirizzo reale se il server proxy si nasconde quegli indirizzi.

Problemi correlati