2

次のセットアップで 3 つの WebApi アプリケーションを実行しています

App1
Runs on Server1
Runs on IIS 7.5 on Site1 with a Fix IP .1

App2 
Runs on Server1
Runs on IIS 7.5 on Site2 with a Fix IP .2

App3
Runs on Server2
Runs on IIS 7.5 on Site3 with a Fix IP .3

3 つのアプリはすべてAppX/Information、IP アドレスを返す実装を行います。私はそれに使用HttpContext.Current.Request.UserHostAddressします。

App3電話をかけるApp1/Informationか、正しいApp2/InformationIP を取得します。.3

App1電話をかけると、代わりにApp2/InformationIPを取得します.2.1

代わりにIPを取得する場合App2も同様ですApp1/Information.1.2

間違ったIPを取得する理由を誰かが説明していますか? App1とApp2は同じサーバー上にあるので、何か関係があると思います...?

アップデート

appcmd list site
SITE "Default Web Site" (id:1,bindings:http/*:80:,net.tcp/808:*,net.pipe/*,net.msmq/localhost,msmq.formatname/localhost,state:Stopped)
SITE "App1" (id:2,bindings:https/161.20.134.49:443:,state:Started)
SITE "App2" (id:3,bindings:https/161.20.134.60:443:,state:Started)
SITE "AnotherApp" (id:4,bindings:https/161.20.134.59:443:,state:Started)


appcmd list app
APP "Default Web Site/" (applicationPool:DefaultAppPool)
APP "App1/" (applicationPool:MyApp Pool)
APP "App2/" (applicationPool:MyApp Pool)
APP "AnotherApp/" (applicationPool:AnotherApp Pool)
4

1 に答える 1

1

Request.UserHostAddressIIS サーバー変数 REMOTE_ADDR を内部的に返します。したがって、あなたの質問への答えは、クライアントによって確立された TCP 接続に基づいて、IIS がこのサーバー変数をどのように設定するかによって異なります。IIS が何をするのかはわかりませんが、これが私の推測です。REMOTE_ADDR は、サーバーに到達するネットワーク パケットの送信元 IP に他なりません。この送信元 IP は、ネットワーク パケットがサーバーにルーティングされる方法によって異なります。私の推測では (これについては非常に肯定的です)、App1 と App2 は同じ物理ボックスにあるため、要求が物理ネットワーク カードを通過する必要はなく、この IIS により、要求が同じデバイスからのものであると判断できるためです。実行されているマシンであり、バインディングに関連付けられた IP を返します。これをチェックアウト。App3 が App1 または App2 を呼び出す場合、要求はネットワーク カードから送信される必要があり、IIS はその場合にクライアント マシンの IP アドレスを取得します。

于 2013-06-26T04:33:50.623 に答える