2008-12-24 52 views
24

有沒有辦法獲得WCF連接的遠程IP地址?如何獲取WCF遠程端點的IP地址?

我猜爲什麼它沒有內置到WCF框架中的原因是WCF可以使用非TCP/IP綁定,所以IP地址並不總是有意義的。

但是,這些信息對所有廣泛使用的綁定(據我所知:BasicHttp,DualHttp,WSHttp和NetTcp)都是有意義的。

IP地址可能使用反射訪問,但我寧願找到一個文檔化的方式來獲取它,而不是黑客進入框架類。

我在這個問題上搜索了一下,似乎很多人都遇到了它,但沒有找到一個體面的解決方案(通常的答案是to rely on the message headers,但這意味着信任客戶端提供其真正的IP地址,這是如果您想記錄IP地址出於安全原因,則不是一個選項)

回答

14

顯然它已被添加到3.5通過RemoteEndpointMessageProperty;請參閱here

+0

該帖子稱這可能是欺騙性的,但我無法弄清楚他們是在談論經典的IP欺騙(使用syn/acks)還是他們的意思是由遠程wcf應用程序提供信息。我認爲這是前者,因爲我們得到的地址是代理/中繼地址。對此有何暗示? – Brann 2008-12-24 17:18:17

+0

對不起,不,我不知道。 – 2008-12-24 17:46:52

2

如果您在服務端並希望獲取客戶端IP,則必須檢查OperationContext的消息屬性。 外觀here或h ere例如

+0

如果我沒有弄錯,這意味着信任的客戶端(參見第一個鏈接的帖子的末尾:「我們不做任何形式的欺騙檢測的,所以要小心使用IP的任何種類的安全決定。「) 我寧願訪問我自己的套接字並檢索它連接的IP地址。 – Brann 2008-12-24 10:11:57

3
OperationContext context = OperationContext.Current; 
MessageProperties properties = context.IncomingMessageProperties; 
RemoteEndpointMessageProperty endpoint = properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty; 
string address = endpoint.Address;