using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.ServiceModel;using System.ServiceModel.Channels;using System.Reflection;namespace wcf.wcfbase { ////// 使用ChannelFactory为wcf客户端创建独立通道 /// public class WcfChannelFactory { public WcfChannelFactory() { } ////// 执行方法 WSHttpBinding /// ///服务接口 ///wcf地址 ///方法名 ///参数列表 public static object ExecuteMetod(string uri, string methodName, paramsobject[] args) { //BasicHttpBinding binding = new BasicHttpBinding(); //出现异常:远程服务器返回错误: (415) Cannot process the message because the content type 'text/xml; charset=utf-8' was not the expected type 'application/soap+xml; charset=utf-8'.。 WSHttpBinding binding = new WSHttpBinding(); EndpointAddress endpoint = new EndpointAddress(uri); using (ChannelFactory channelFactory = new ChannelFactory (binding, endpoint)) { T instance = channelFactory.CreateChannel(); using (instance as IDisposable) { try { Type type = typeof(T); MethodInfo mi = type.GetMethod(methodName); return mi.Invoke(instance, args); } catch (TimeoutException) { (instance as ICommunicationObject).Abort(); throw; } catch (CommunicationException) { (instance as ICommunicationObject).Abort(); throw; } catch (Exception vErr) { (instance as ICommunicationObject).Abort(); throw; } } } } //nettcpbinding 绑定方式 public static object ExecuteMethod (string pUrl, string pMethodName,paramsobject[] 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 channel = new ChannelFactory (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; } } } } //调用示例: string uri = "http://localhost:9998/mywcf/Service"; object o = ExecuteMetod (uri, "Add",12.0,13.0); Console.WriteLine(o.ToString()); Console.ReadKey(); //简单方法,不考虑太多,直接调用: EndpointAddress address1 = new EndpointAddress("http://localhost:9998/mywcf/Service"); ServiceClient service1 = new ServiceClient(new WSHttpBinding(), address1); Console.WriteLine(service1.Add(12.0, 13.0).ToString()); } }