• WCF 程序入门


      WCF是微软公司推出的符合SOA思想的分布式应用程序技术框架和编程模型,是建立在消息通信这一概念基础上运行的一个运行时服务系统。

      WCF编程模型的目标是实现以下两个实体之间的通信:WCF服务端和WCF客户端。该编程模型封装在.NET框架的System.SericeModel命名空间中。

        利用WCF,开发人员不再根据不同的需求分别选择不同的模型,而是只用一种模型,就可以用统一的格式和用法编写各种网络应用程序,从而构建安全的,可靠的,跨平台(包括Windows平台和非Windows平台)的分布式解决方案。

    一 WCF示例

      1 创建服务端项目和客户端项目

        一般为了方便调试和观察,一般在同一个解决方案中既包括WCF服务端应用程序项目,也包括客户端应用程序项目。但是,在实际的项目开发中,由于用【WCF服务应用程序】模板创建的服务是通过IIS单独部署的,所以应分别用不同的解决方案来实现。

        (1)选择【WPF应用程序】模板,新建一个客户端应用程序项目。解决方案名WcfServiceTest,项目名为Client。

        (2)创建服务端

          在【解决方案管理器】中,右键单击解决方案名,选择【添加】-->【新建项目】,在弹出的窗口中选择【WCF服务应用程序】模板,单击【确定】,此时系统会自动添加对System.ServiceModel命名空间的引用,并自动在该项目中生成一下文件。

        • IService.cs:用接口定义服务协定和数据协定
        • Service.svc和Service.svc.cs:实现IService1接口中声明的服务操作
        • Web.config:服务器端配合文件,用于定义服务行为以及绑定的协议等          

        (3)添加新服务(可选)

           如果不希望使用默认的WCF服务Service1,可以利用【重构】将其替换成其他名称,或者删除IService.cs,IService.svc,IService.svc.cs,然后按照下面的方法创建或添加新服务。右击项目名,选择【添加】-->【WCF服务】命令,在弹出的窗口中将【项名称】改为新的WCF服务名称,单击【确定】按钮。

       2 编写服务端代码

          此部分的主要工作就是设计和实现协定,包括服务协定,数据协定以及消息协定。

          服务协定用ServiceContract特性来声明,用接口来定义。在借口内部,用方法及其参数声明服务提供的操作,在接口中声明的这些方法统称为“操作方法”。注意在服务协定中只能声明操作方法,不允许声明属性和字段。

        (1)定义接口(IService.cs)

        [ServiceContract]
        public interface IService1
        {
            // TODO: 在此添加您的服务操作
    
            [OperationContract] string SayHello(string name);
            [OperationContract] double Add(double d1, double d2);
            [OperationContract] double Divide(double d1, double d2);
        }

        (2)实现接口声明的操作方法(Service.svc.cs)

        public class Service1 : IService1
        {
            public string SayHello(string name)
            {
                return string.Format("Hello, {0}", name);
            }
    
            public double Add(double d1, double d2)
            {
                return d1 + d2;
            }
    
            public double Divide(double d1, double d2)
            {
                return d1 / d2;
            }
        }    

      代码编写完毕后,右键单击WcfService项目名,选择【生成】或【重新生成】,以确保没有语法错误。

      3 修改服务端配置

        (1)修改绑定配置(Web.config)文件,找到protocolMapping配置节,在其上方添加以下代码:

        <bindings>
          <basicHttpBinding>
            <binding name ="b1" transferMode ="Buffered" textEncoding="utf-8" messageEncoding ="Text">
              <security mode="None" />
            </binding>
          </basicHttpBinding>
        </bindings>

          将protocolMapping配置节的代码改为一下内容:

        <protocolMapping>
            <add binding="basicHttpBinding" scheme="http"/>
        </protocolMapping>

          在protocolMapping配置节的下方添加以下代码:

        <services>
          <service name="WcfService1.Service1">
              <endpoint binding="basicHttpBinding" bindingConfiguration="b1" contract="WcfService1.IService1" />
          </service>
        </services>

        (2)开通调试功能

           在Web.config中找到includeExceptionDetailInFaults,将其改为true。

              <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
              <serviceDebug includeExceptionDetailInFaults="true"/>

      4 测试服务(可选)

        用【WCF应用程序】模板创建WCF服务后,如果需要,可以直接利用【WCF测试客户端】来测试每个服务操作。

        右击WcfService文件名,选择【设为启动项目】命令,并选中要测试的Service.svc文件名(测试那个服务就选中哪个.svc文件),然后按<F5>调试运行,此时系统会自动弹出WCF测试客户端。

        测试结束后,要再将WPF应用程序设为启动项目。

      5 在服务端添加引用

        (1)确保服务已经启动

          单击WcfService项目,选择【生成】或【重新生成】,若WCF服务没有启动,则会失败。

        (2)查找引用的服务

          单击Client项目中的【引用】-->【添加服务引用】,在弹出的对话框中,单击【发现】,此时会自动找到与该项目在同一个解决方案中俄的WCF服务

        (3)生成客户端代码

    using Client.ServiceReference1;
            private void btn1_Click(object sender, RoutedEventArgs e)
            {
                textBlock1.Text = "客户端调用sayhello方法,服务端返回:
    ";
                //创建服务客户端
                Service1Client client = new Service1Client();
                //调用服务
                string s = client.SayHello("欢迎学习WCF!");
                //关闭服务客户端并清理资源
                client.Close();
                textBlock1.Text += s;
            }

      

  • 相关阅读:
    希腊字母大全
    SQL 等值连接(内连接)、自然连接(Out join,Left join,Right join)的区别
    JDK11 JAVA11下载安装与快速配置环境变量教程
    “由爱故生忧,由爱故生怖。若离于爱者,无忧亦无怖”
    How to use special characters in XML?
    Crow’s Foot Notation
    How do I unmute my Lenovo laptop?
    Nginx学习笔记--001-Nginx快速搭建
    Nginx 相关介绍
    java使用httpclient封装post请求和get的请求
  • 原文地址:https://www.cnblogs.com/roxy/p/6100090.html
Copyright © 2020-2023  润新知