1 using System; 2 using System.ServiceModel; 3 using System.ServiceModel.Description; 4 using System.ServiceModel.Channels; 5 6 namespace ZhiYuan.ServiceProxy 7 { 8 public class WCFClient<T> 9 { 10 11 public static T CreateService(Binding bind, EndpointAddress address)12 { 13 ChannelFactory<T> channelFactory = new ChannelFactory<T>(bind);14 return channelFactory.CreateChannel(address);15 }16 public static T CreateService(string uri)17 { 18 19 #region TCP/IP方案20 // NetTcpBinding bind = new NetTcpBinding();21 // EndpointAddress address = new EndpointAddress("net.tcp://127.0.0.1:1785/Service");22 // EndpointAddress metaAddress = new EndpointAddress("net.tcp://127.0.0.1:1785/Service/MEX");23 #endregion24 25 BasicHttpBinding bind = new BasicHttpBinding();26 bind.MaxBufferSize = int.MaxValue;27 bind.MaxReceivedMessageSize = int.MaxValue;28 bind.MaxBufferPoolSize = int.MaxValue;29 bind.ReaderQuotas.MaxArrayLength = int.MaxValue;30 bind.ReaderQuotas.MaxBytesPerRead = int.MaxValue;31 bind.ReaderQuotas.MaxDepth = int.MaxValue;32 bind.ReaderQuotas.MaxNameTableCharCount = int.MaxValue;33 bind.ReaderQuotas.MaxStringContentLength = int.MaxValue;34 35 bind.SendTimeout = new TimeSpan(0,5,60);36 EndpointAddress address = new EndpointAddress(uri);37 38 ChannelFactory<T> channelFactory = new ChannelFactory<T>(bind);39 return CreateService(bind, address);40 }41 42 /// <summary>43 /// 采用通道工厂的方式生成客户端服务对象实例44 /// </summary>45 /// <param name="bind"></param>46 /// <param name="address"></param>47 public ZhiYuan.ServiceContract.Member.ILoginService CreateLoginService()48 { 49 return WCFClient<ZhiYuan.ServiceContract.Member.ILoginService>.CreateService("http://localhost:1785/Member/LoginService.svc");50 51 }52 53 54 public ZhiYuan.ServiceContract.Member.IMemberService CreateMemberService()55 { 56 57 return WCFClient<ZhiYuan.ServiceContract.Member.IMemberService>.CreateService("http://localhost:1785/Member/MemberService.svc");58 59 60 }61 62 }
63 }