2010-08-26 83 views
4

我希望我的請求通過特定的IP地址出去。有沒有辦法在WCF中做到這一點。爲什麼我需要這個解釋是有點冗長,所以我寧願不進入。如何在發出請求之前將WCF Http客戶端綁定到特定的出站IP地址

下面是示例代碼

string ipAddress = "192.168.0.32"; 
IService service; 
ChannelFactory<IOmlService> factory = new ChannelFactory<IService>(new BasicHttpBinding(), new EndpointAddress("http://" + IPAddress + ":6996/IService")); 
service = factory.CreateChannel(); 
service.Test(); 

下面是一個示例場景來解釋正是我要找的。假設我的機器上有兩個IP(192.168.0.30和192.168.0.31)。它們都可以達到192.168.0.32。如果我現在運行此代碼,它將從我的任何IP(.30或.31)中打IP(.32)。我如何強制它通過我的特定IP(例如.30)。有沒有辦法做到這一點使用WCF?

回答

2

的問題的答案是,它無法做到的。下面是微軟的MVP


所以,你要讓客戶端機器主動選擇網絡adpater接口(安裝就可以了)發出的WCF請求中的一個答案嗎?恐怕這是出於WCF的控制,因爲WCF只專注於以下地址:

**當作爲主機時,我們可以選擇綁定到特定的主機名/地址以偵聽客戶端請求 **當作爲客戶端時,我們可以選擇發送請求的目標地址/主機名。


+0

如果無法完成,並且有人打開了功能請求,我會投票支持該功能。 – 2010-09-15 19:39:39

+0

畢竟這些年來,它還是缺席? – 2014-10-17 11:51:27

0

在我看來,你的問題應該通過在路由表中設置額外的死記硬背來解決。嘗試做從命令提示符下啓動具有管理權限:

route add 192.168.0.32 mask 255.255.255.255 192.168.175.30 

如果你想保存路由添加-p另外切換。

+0

我更多地試圖找到如何將WCF客戶端綁定到WCF中的特定出站IP。我將如何明確地綁定它。 此外,我可能沒有與行政私營部門合作。另外,這是一個將在許多機器上使用的應用程序,我不確定每次我想要發出這些請求時,編程地使用路由表是否有意義。 – Mark 2010-08-26 21:48:06

+0

通常,只爲服務器**應用程序定義綁定到特定地址**。然後服務器IP將被知道。客戶端只需使用路由表連接到這個IP。路由表定義通過哪個接口可以存檔IP地址。至少界面指標是這樣說的。因此,如果您的IP段上有如此異乎尋常的IP地址,管理員可以定義一次('route -p ...')目標IP應該如何到達。此信息將保持不變,並且在重新啓動或登錄其他用戶後不會更改。 – Oleg 2010-08-26 22:23:35

+0

確實,通常只爲服務器定義綁定。但是對於套接字例如,您可以爲客戶端定義綁定。我的問題是可以從WCF做到這一點。這是一個WCF的問題。 – Mark 2010-08-27 17:04:58

1

您是否試圖在服務器上製作類似於IP-Sec的東西,以便它只接受來自特定IP地址的請求?

在這種情況下,你需要實現IEndpointBehavior和IDispatchMessageInspector和:

public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext) 
    { 
     RemoteEndpointMessageProperty remoteAddress = 
      (OperationContext.Current.IncomingMessageProperties[RemoteEndpointMessageProperty.Name] as 
      RemoteEndpointMessageProperty); 

     // validate ip here 
     return null; 
    } 
相關問題