客户端调用wcf ,有时需要动态的调用服务端的WCF中的方法,本方法,反射wcf 的接口,动态调用接口中的方法。
主要为,动态绑定,反射动态调用。
- public static object ExecuteMethod<T>(string pUrl,string pMethodName, params object[] pParams)
- {
- EndpointAddress address = new EndpointAddress(pUrl);
- Binding bindinginstance = null;
- NetTcpBinding ws = new NetTcpBinding();
- ws.MaxReceivedMessageSize = 20971520;
- ws.Security.Mode = SecurityMode.None;
- bindinginstance = ws;
- using (ChannelFactory<T> channel = new ChannelFactory<T>(bindinginstance,address))
- {
- T instance = channel.CreateChannel();
- using (instance as IDisposable)
- {
- try
- {
- Type type = typeof(T);
- MethodInfo mi = type.GetMethod(pMethodName);
- return mi.Invoke(instance, pParams);
- }
- catch (TimeoutException)
- {
- (instance as ICommunicationObject).Abort();
- throw;
- }
- catch (CommunicationException)
- {
- (instance as ICommunicationObject).Abort();
- throw;
- }
- catch (Exception vErr)
- {
- (instance as ICommunicationObject).Abort();
- throw;
- }
- }
- }
- }
本文使用的是nettcpbinding 绑定方式,可修改。
调用方法使用
ExecuteMethod<IService>("net.tcp://192.168.0.1:8001/mex", "Test", new object[] { "参数" })