我正试图想办法让Silverlight客户端知道当前用户的IP地址。我以前也看到过类似的信息,但是参考将它传回服务器,这与我的目的不同。
我正在尝试编写一个简单的应用程序,根据用户的IP地址更改MediaElement的源代码。因此,仅在客户端需要IP地址。
有没有办法在不使用网络服务的情况下找到IP地址?如果我必须使用网络服务,哪一个会好用?
答案 0 :(得分: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>
我更喜欢在代码中使用带有ASP <%=Request
的initParams ...而不是使用JavaScript来修改Silverlight应用程序中的控件。将其传递到InitParams后,您可以将值加载到应用程序的资源字典中。我在博客文章中详细介绍了所有这些内容:Pass the IP Address of a User to Silverlight as a Parameter (注意:如果我的网站benmccormack.com链接不起作用,您可能需要直接访问该网站并查找它。我在9/26/2009发表了这篇文章。
答案 1 :(得分:2)
您无法使用任何客户端mechansims(javascript,silverlight等)获取客户端计算机的IP地址。
Michale Sync发布了一篇关于如何从silverlight检索客户信息的有趣文章。silverlight-2-beta1-url-referrer-screen-resolution-clients-data-time-and-ip-address。
这个approch应该工作..但也有限制
它无法获得实际效果 代理服务器隐藏的地址 那些地址。
答案 2 :(得分:1)
在托管Silverlight控件的aspx文件中有一堆代码
var ip ='&lt;%= Request.UserHostAddress%&gt;'
然后连接onup事件并将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中托管,那么您可以尝试使用Apache服务器:
var ip = '<!--#echo var="REMOTE_ADDR"-->';