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