• 个人项目中的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中,通过服务地址跳转的方式访问。

     
  • 相关阅读:
    linux 时间同步
    sublime3 install python3
    Postfix的工作原理
    MySQL启动报错
    Socket server
    自定义静态网卡配置
    Nginx 404 500
    Pymysql
    Gitlab smtp 设置
    Windows 文件自动同步共享工具
  • 原文地址:https://www.cnblogs.com/kurt/p/3556965.html
Copyright © 2020-2023  润新知