我现在想在服务端的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,请各位大虾帮帮忙,有知道该怎么办的吗?
客戶請求的時候保存一個列表,包含客戶端的對象實例,包含ip地址等。如果發生錯誤,可以在這個列表中查找實例,如果找到,就可以得到相應的ip了。
發生錯誤的時候,已經沒有客戶端的上下文了。
同上,Fault的时候,请求发生异常,连接自动关闭,获取不到客户端了
可以在请求一进来的时候,就获取ip
@菜鸟老了: IP是可以一进来就获取,可是怎么知道哪个IP的channel出了问题。请大虾指教。
@Charles Yan: 剛開始 channel 也是可以獲取到的哦
@無限遐想: 嗯,channel在Faulted事件触发的时候是可以获得的,其实我就是很想知道由channel怎么得到客户端IP,我只能获取到客户端Uri,但还不是我想要的:schemas.microsoft.com
@Charles Yan: 因此 在初始化的時候,記錄信息。在Faulted事件中,用記錄的channel進行查詢信息。
@無限遐想: 嗯,我也是这么想的,暂时只有这个办法。