首页 新闻 会员 周边 捐助

关于wcf服务端获取客户端IP的问题,高手进来看看

0
悬赏园豆:20 [已解决问题] 解决于 2012-05-08 10:25

我现在想在服务端的Channel.Faulted事件触发的时候,获取到发生信道错误的客户端IP,但始终获取不到。

在Faulted事件方法中我是这样写的:

IContextChannel channel = (IContextChannel)sender;
            string str = channel.RemoteAddress.Uri.Host;

但远程的host始终都是schemas.microsoft.com,如何才能获取到客户端的IP呢,难道客户端的uri需要手动指定吗?

网上我看到了一种获取客户端IP的方式:

MessageProperties properties = OperationContext.Current.IncomingMessageProperties;               
                RemoteEndpointMessageProperty endpoint =
                    properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;

这样确实能获取到客户端的IP,但当Channel.Faulted事件触发的时候OperationContext.Current是null,请各位大虾帮帮忙,有知道该怎么办的吗?

wcf
Charles Yan的主页 Charles Yan | 菜鸟二级 | 园豆:202
提问于:2012-05-06 00:02
< >
分享
最佳答案
2

客戶請求的時候保存一個列表,包含客戶端的對象實例,包含ip地址等。如果發生錯誤,可以在這個列表中查找實例,如果找到,就可以得到相應的ip了。

發生錯誤的時候,已經沒有客戶端的上下文了。

收获园豆:20
無限遐想 | 老鸟四级 |园豆:3740 | 2012-05-06 08:18

同上,Fault的时候,请求发生异常,连接自动关闭,获取不到客户端了

菜鸟老了 | 园豆:145 (初学一级) | 2012-05-06 15:58

可以在请求一进来的时候,就获取ip

菜鸟老了 | 园豆:145 (初学一级) | 2012-05-06 15:59

@菜鸟老了: IP是可以一进来就获取,可是怎么知道哪个IP的channel出了问题。请大虾指教。

Charles Yan | 园豆:202 (菜鸟二级) | 2012-05-07 12:06

@Charles Yan: 剛開始 channel 也是可以獲取到的哦

無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-07 12:32

@無限遐想: 嗯,channel在Faulted事件触发的时候是可以获得的,其实我就是很想知道由channel怎么得到客户端IP,我只能获取到客户端Uri,但还不是我想要的:schemas.microsoft.com

Charles Yan | 园豆:202 (菜鸟二级) | 2012-05-07 20:52

@Charles Yan: 因此 在初始化的時候,記錄信息。在Faulted事件中,用記錄的channel進行查詢信息。

無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-08 09:18

@無限遐想: 嗯,我也是这么想的,暂时只有这个办法。

Charles Yan | 园豆:202 (菜鸟二级) | 2012-05-08 10:24
其他回答(1)
0
artwl | 园豆:16736 (专家六级) | 2012-05-06 08:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册