个人项目中的WCF使用

 今天闲着无事,给大家分享一下我的一个项目中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中,通过服务地址跳转的方式访问。

 
原文地址:https://www.cnblogs.com/kurt/p/3556965.html