今天闲着无事,给大家分享一下我的一个项目中WCF的使用。我这项目使用的是Silverlight,至于其他类型的使用方法也是一样的。
1.建立一个Silverlight带Web项目的解决方案。
2.在web项目中创建Wcf服务文件.如文件创建在web项目下Services文件夹中,名为HomeService.svc。
3.在客服端引用wcf服务。
4.在应用程序中获取Wcf服务。
1 string WCFServiceUri = "Services/HomeService.svc"; //WCF服务 相对路径 2 3 HomeService.HomeServiceClient hs = (HomeService.HomeServiceClient)CreateWebServiceObject(typeof(HomeService.HomeServiceClient), WCFServiceUri); 4 hs.UserLoginCompleted += new EventHandler<HomeService.UserLoginCompletedEventArgs>(hs_UserLoginCompleted); 5 hs.UserLoginAsync(this.txtLoginID.Text, this.pwbLoginPaw.Password); 6 7 8 private void hs_UserLoginCompleted(object sender, HomeService.UserLoginCompletedEventArgs e) 9 { 10 //code 11 } 12 13 14 /// <summary> 15 /// 指定最大接收信息的大小 16 /// </summary> 17 public static long dMaxReceivedMessageSize = 2147483647; 18 19 /// <summary> 20 /// 指定最大缓冲区的大小 21 /// </summary> 22 public static int dMaxBufferSize = 2147483647; 23 24 /// <summary> 25 /// <para>1.type 你需要创建服务的类型。例如:typeof(WcfClass) </para> 26 /// <para>2.webServiceName 服务路径/ServiceHost</para> 27 /// </summary> 28 public static object CreateWebServiceObject(Type type, string webServiceName) 29 { 30 BasicHttpBinding basicBinding = new BasicHttpBinding(); 31 basicBinding.MaxReceivedMessageSize = dMaxReceivedMessageSize; 32 basicBinding.MaxBufferSize = dMaxBufferSize; 33 basicBinding.SendTimeout = TimeSpan.FromMinutes(2); 34 CustomBinding binding = new CustomBinding(basicBinding); 35 36 EndpointAddress endPoint = new EndpointAddress(GetServicesUri(webServiceName,3)); 37 38 return Activator.CreateInstance(type, binding, endPoint); 39 } 40 41 /// <summary> 42 /// 获取路径 43 /// </summary> 44 /// <param name="sUri"></param> 45 /// <param name="type">1.路径到ClientBin下.2.根目录.3.当前页面路径</param> 46 /// <returns></returns> 47 public static string GetServicesUri(string sUri, int type) 48 { 49 var applicationUri = Application.Current.Host.Source; 50 string uri = string.Empty; 51 switch (type) 52 { 53 case 1: 54 uri = new Uri(Application.Current.Host.Source, string.Format("{0}", sUri)).AbsoluteUri; //ClientBin 55 break; 56 case 2: 57 uri = new Uri(Application.Current.Host.Source, string.Format("../{0}", sUri)).AbsoluteUri; //localhost 58 break; 59 case 3: 60 uri = new Uri(System.Windows.Browser.HtmlPage.Document.DocumentUri, sUri).ToString(); 61 break; 62 default: 63 uri = sUri; 64 break; 65 } 66 67 return uri; 68 }
这样便可以访问到web端的Wcf服务。
注意:在实例化BasicHttpBinding对象时,BasicHttpBinding的MaxBufferSize和MaxReceivedMessageSize最好设置成一样大小,本人测试了MaxReceivedMessageSize小于MaxBufferSize的情况,貌似是不可以的。
在一些实际的项目中,如果项目安全要求比较高的话,本人建议将服务端处理文件封装在DAL中,通过服务地址跳转的方式访问。