博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
获得WCF Client端的本地端口 z
阅读量:2236 次
发布时间:2019-05-09

本文共 1572 字,大约阅读时间需要 5 分钟。

当WCF调用远程服务时,显示该调用的网速或流量。其中比较关键的一步就是需要获得WCF  Client端的本地端口,原来以为是个简单的事情,结果查了1个多小时谷歌,硬是没找到好的法子,只有自己动手了。

    首先,反编译System.ServiceModel.dll的代码,查找Socket,然后,就是一直反复的“转到定义”、“查找所有引用",最后利用反射搞定了!代码分享如下,如果大家有什么更好的方法,请告知下。

 

var temp = RASHelper.CreatProxy
(SystemConfiger.ServerEndPoint);//创建ClientProxy,就是调用ChannelFactory
.CreateChannel方法。 (temp as ICommunicationObject).Open();//打开连接,需要该操作内部才会创建Socket对象,并调用Connect方法。 var realProxy= System.Runtime.Remoting.RemotingServices.GetRealProxy(temp);//RealProxy,获得真实代理 var channel = GetField(realProxy, "serviceChannel"); //ServiceChannel; var binder = GetField(channel, "binder");//binder; var binderChannel = GetField(binder, "channel");//binderChannel var connetion = GetProperty(binderChannel, "Connection");//IConnect var innerConnetion = GetProperty(connetion, "Connection");//InnerIConnect; Socket socket = GetField(innerConnetion, "socket") as Socket;//曙光初现 var localPort = socket.LocalEndPoint;//千辛万苦,拿到本地端口; Console.Write(localPort); } private static object GetField(object obj, string fieled) { return obj.GetType().GetField(fieled, BindingFlags.NonPublic | BindingFlags.Instance).GetValue(obj); } private static object GetProperty(object obj, string fieled) { return obj.GetType().GetProperty(fieled, BindingFlags.NonPublic | BindingFlags.Instance).GetValue(obj,null); }

 

 

 

转载于:https://www.cnblogs.com/zeroone/p/3606184.html

你可能感兴趣的文章
Java实现简单的递归操作
查看>>
面试Java程序员需具备的11个技能
查看>>
HashMap 和 HashTable 到底哪不同 ?
查看>>
Java实现简单的递归操作
查看>>
Struts2工作原理和执行流程图
查看>>
在线预览Word,Excel~
查看>>
hibernate延迟加载(get和load的区别)
查看>>
关于文件拷贝效率问题
查看>>
MyBatis分页插件PageHelper的使用
查看>>
【MyBatis学习01】宏观上把握MyBatis框架
查看>>
【MyBatis学习02】走进MyBatis的世界
查看>>
【MyBatis学习03】原始dao开发方法及其弊端
查看>>
【MyBatis学习04】mapper代理方法开发dao
查看>>
【MyBatis学习05】SqlMapConfig.xml文件中的配置总结
查看>>
【MyBatis学习06】输入映射和输出映射
查看>>
【MyBatis学习07】动态sql
查看>>
【MyBatis学习08】高级映射之一对一查询
查看>>
【MyBatis学习09】高级映射之一对多查询
查看>>
【MyBatis学习10】高级映射之多对多查询
查看>>
【MyBatis学习11】MyBatis中的延迟加载
查看>>