1 using System; 2 using System.Reflection; 3 using System.ServiceModel; 4 using System.ServiceModel.Channels; 5 6 namespace ManageSystem.Common { 7 public class WCFChannelFactory { 8 /// <summary> 9 /// 执行方法 WSHttpBinding 10 /// </summary> 11 /// <typeparam name="T">服务接口</typeparam> 12 /// <param name="uri">wcf地址</param> 13 /// <param name="methodName">方法名</param> 14 /// <param name="args">参数列表</param> 15 public static object ExecuteMethod<T>(string uri, string methodName, params object[] args) { 16 BasicHttpBinding binding = new BasicHttpBinding(); 17 EndpointAddress endpoint = new EndpointAddress(uri); 18 19 using (ChannelFactory<T> channelFactory = new ChannelFactory<T>(binding, endpoint)) { 20 T instance = channelFactory.CreateChannel(); 21 using (instance as IDisposable) { 22 try { 23 Type type = typeof(T); 24 MethodInfo mi = type.GetMethod(methodName); 25 return mi.Invoke(instance, args); 26 } 27 catch (TimeoutException) { 28 //(instance as ICommunicationObject).Abort(); 29 //throw; 30 } 31 catch (CommunicationException) { 32 //(instance as ICommunicationObject).Abort(); 33 //throw; 34 } 35 catch (Exception) { 36 //(instance as ICommunicationObject).Abort(); 37 //throw; 38 } 39 } 40 } 41 return null; 42 } 43 } 44 }