C#アプリケーションが実行されているコンピューターの外部IPを確認する必要があります。
アプリケーションでは、サーバーへの接続(.NETリモーティングを介して)があります。サーバー側でクライアントのアドレスを取得する良い方法はありますか?
(もう少し明確にするために、質問を編集しました。私が少し漠然としていたときに、質問に答えるために最善を尽くしたすべての親切な人々に謝罪します)
解決策:
自分に合った方法を見つけました。CommonTransportKeys.IPAddressにアクセスできるカスタムIServerChannelSinkProviderとIServerChannelSinkを実装することで、CallContextにクライアントIPを簡単に追加できます。
public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack,
IMessage requestmessage, ITransportHeaders requestHeaders,
System.IO.Stream requestStream, out IMessage responseMessage,
out ITransportHeaders responseHeaders, out System.IO.Stream responseStream)
{
try
{
// Get the IP address and add it to the call context.
IPAddress ipAddr = (IPAddress)requestHeaders[CommonTransportKeys.IPAddress];
CallContext.SetData("ClientIP", ipAddr);
}
catch (Exception)
{
}
sinkStack.Push(this, null);
ServerProcessing srvProc = _NextSink.ProcessMessage(sinkStack, requestmessage, requestHeaders,
requestStream, out responseMessage, out responseHeaders, out responseStream);
return srvProc;
}
そして後で(クライアントからリクエストを受け取ったとき)、このようにCallContextからIPを取得します。
public string GetClientIP()
{
// Get the client IP from the call context.
object data = CallContext.GetData("ClientIP");
// If the data is null or not a string, then return an empty string.
if (data == null || !(data is IPAddress))
return string.Empty;
// Return the data as a string.
return ((IPAddress)data).ToString();
}
これで、IPをクライアントに送り返すことができます。