Как заставить клиента Silverlight узнать IP-адрес пользователя

Я пытаюсь понять, как заставить Silverlight Client знать IP-адрес текущего пользователя. Я уже видел эту информацию ранее, но ссылаюсь на ее передачу на сервер, который отличается от моей цели.

Я пытаюсь написать простое приложение, которое изменяет источник MediaElement в зависимости от IP-адреса пользователя. Следовательно, IP-адрес нужен только на стороне клиента.

Есть ли способ узнать IP-адрес без использования веб-службы? Если я должен использовать веб-сервис, какой из них можно использовать?

Ответ 1

Поработав над этим проектом некоторое время, я думаю, что я нашел более простое решение, размещенное на странице 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 вы можете загрузить значения в словарь ресурсов приложения. Я подробно расскажу об этом в своем сообщении в блоге: Передайте IP-адрес пользователя в Silverlight в качестве параметра (ПРИМЕЧАНИЕ. Если ссылка на мой сайт на benmccormack.com не работает, вам, возможно, придется сразу перейти на сайт и найти его. Я опубликовал рецензию на 26.09.2009).

Ответ 2

Вы не можете получить IP-адрес клиентской машины с помощью любых клиентских mechansims (javascript, silverlight и т.д.).

Michale Sync опубликовала интересную статью о том, как получить информацию о клиенте из silverlight.. silverlight-2-beta1-url-referrer-screen-resolution-clients-data-time-and-ip-address.

этот подход должен работать. Но есть и ограничение

Он не сможет получить фактическое адрес, если прокси-сервер скрывается эти адреса.

Ответ 3

У вас есть код кода в вашем файле aspx, на котором установлен элемент управления silverlight

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

затем подключите событие onload и установите 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"-->';