2009-09-01 163 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> 

我更喜歡使用initParams在與ASP <%=Request ...直接在代碼比使用JavaScript搞亂修改Silverlight應用程序內的控制。將它傳遞到InitParams後,您可以將這些值加載到應用程序的資源字典中。我在我的博客文章中詳細介紹了所有這些內容:Pass the IP Address of a User to Silverlight as a Parameter(注意:如果在我的網站benmccormack.com的鏈接不起作用,您可能需要直接訪問網站並找到它。 - 9/26/2009)

+2

要添加到此答案,您可以在'App.xaml.cs'的'Application_Startup'方法中找到Silverlight中的變量。InitParams [「txtUserIP」]' – Rachel 2012-09-21 17:58:25

+0

我該如何使用html頁面來代替asp.net? – nhenrique 2014-01-07 11:14:52

1

有代碼AA PICE主辦Silverlight控件

VAR IP = '<%= Request.UserHostAddress%>'

然後聯播onload事件的aspx文件和IP設置爲你的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" /> 

如果你的Silverlight主頁在Apache的託管您嘗試thisan Apache服務器:

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

我學會了將變量傳遞給Silverlight應用程序。我不得不在我的XAML中添加一個元素來放置IP地址。但是,它只返回127.0.0.1。 – 2009-09-01 14:04:58

+0

您是否在調試我們的應用程序嘗試在另一臺機器上託管應用程序,而不是您正在訪問的應用程序的其他機器 – rravuri 2009-09-01 15:20:18

+0

感謝您的建議。我只是通過在工作PC上的IIS上託管它來嘗試這種方式。我實際上得到了更好的結果。它顯示了「防火牆後面的IP」地址,但我認爲這可以滿足我的需求。當我通過VPN訪問時,我得到了我的VPN客戶端地址。從我的工作電腦上,我得到我的內部IP。涼。我應該可以用這個工作。非常感謝! – 2009-09-01 15:25:20