.net wcf实例(二)

  1. WCF实例(带步骤)  
  2.   
  3.    
  4.   
  5.    
  6.   
  7. 本篇转自百度文档,自己试过,确实可以用。  
  8.   
  9. 以订票为例简单应用wcf  
  10. 新建一个wcf服务应用程序  
  11.   
  12.    
  13.   
  14.    
  15. 在IService1.cs定义服务契约  
  16.   
  17. namespace WcfDemo  
  18. {  
  19.     // 注意: 如果更改此处的接口名称 "IService1",也必须更新 Web.config 中对 "IService1" 的引用。  
  20.      [ServiceContract]  // 服务合同 即提供服务的接口或类  
  21.     public interface IService1  
  22.      {  
  23.   
  24.          [OperationContract]  
  25.           
  26.         void AddTicket(int count);  
  27.   
  28.          [OperationContract]  
  29.           
  30.         int BuyTickets(int Num);  
  31.   
  32.          [OperationContract]  //服务契约   即提供服务的实现方法  
  33.           
  34.         
  35.         int GetRemainingNum();  
  36.   
  37.         // 任务: 在此处添加服务操作  
  38.      }  
  39.   
  40.   
  41.     // 使用下面示例中说明的数据约定将复合类型添加到服务操作。  
  42.      [DataContract]   //数据契约    
  43.     public class Ticket  
  44.      {  
  45.         bool boolCount = true;//判断是否还有车票  
  46.         int howmany = 10;//还有多少车票  
  47.          
  48.          [DataMember]  
  49.           
  50.         public bool BoolCalue  
  51.          {  
  52.             get { return boolCount; }  
  53.             set {  
  54.                 if (HowMany > 0)  
  55.                  {  
  56.                      boolCount = false;  
  57.                  }  
  58.                 else  
  59.                  {  
  60.                      boolCount = true;  
  61.                  }  
  62.              }  
  63.          }  
  64.   
  65.          [DataMember]  
  66.           
  67.         public int HowMany  
  68.          {  
  69.             get { return howmany; }  
  70.             set { howmany = value;}  
  71.          }  
  72.        
  73.      }  
  74. }  
  75.   
  76. 在Service1.svc中实现契约服务  
  77.   
  78. namespace WcfDemo  
  79. {  
  80.     // 注意: 如果更改此处的类名“Service1”,也必须更新 Web.config 和关联的 .svc 文件中对“Service1”的引用。  
  81.     public class Service1 : IService1  
  82.      {    
  83.          Ticket T=new Ticket();  
  84.           
  85.         public void   AddTicket(int count)  
  86.          {  
  87.              T.HowMany=T.HowMany+count;  
  88.          }  
  89.           
  90.         public int GetRemainingNum()  
  91.          {  
  92.              
  93.             return T.HowMany;  
  94.          }  
  95.           
  96.         public int BuyTickets(int Num)  
  97.          {  
  98.             if (T.BoolCalue)  
  99.              {  
  100.                  T.HowMany = T.HowMany - Num;  
  101.                 return 1;  
  102.              }  
  103.             else  
  104.              {  
  105.                 return 0;  
  106.              }  
  107.              
  108.          }  
  109.      }  
  110. }  
  111.   
  112. 添加宿主程序用于监测服务  
  113. 添加WinForm项目加入解决方案  
  114. 界面如下图:  
  115.   
  116.   
  117.    
  118. 界面上两个按钮:  
  119. 启动服务按钮: 用于启动wcf服务  
  120. 停止服务按钮: 用于停止wcf服务  
  121. Label:   用于显示服务相关信息  
  122. 后台代码为:  
  123. 应用命名空间 using System.ServiceModel;  
  124. 添加引用 wcf服务生成的dll文件  
  125.   
  126. public partial class Form1 : Form  
  127.      {  
  128.         public Form1()  
  129.          {  
  130.              InitializeComponent();  
  131.          }  
  132.          ServiceHost host = null;//定义 ServiceHost  
  133.         private void button1_Click(object sender, EventArgs e)  
  134.          {  
  135.              host = new ServiceHost(typeof(WcfDemo.Service1));//WcfDemo.Service1 为引用的dll中的服务  
  136.              host.Open();//启动服务  
  137.             this.label1.Text = "服务已启动";  
  138.          }  
  139.   
  140.         private void button2_Click(object sender, EventArgs e)  
  141.          {  
  142.             if (host.State != CommunicationState.Closed)//判断服务是否关闭  
  143.              {  
  144.                  host.Close();//关闭服务  
  145.              }  
  146.             this.label1.Text = "服务已关闭";  
  147.          }  
  148.      }  
  149.   
  150. 接下来配置app.config  
  151.   
  152. <?xml version="1.0" encoding="utf-8" ?>  
  153. <configuration>  
  154.    <system.serviceModel>  
  155.       <services><!--添加服务-->  
  156.         <service name="WcfDemo.Service1" behaviorConfiguration="CalculatorServiceBehavior">  
  157.           <!--name 必须与代码中的host实例初始化的服务一样    
  158.             behaviorConfiguration 行为配置 -->  
  159.           <host>  
  160.             <baseAddresses>  
  161.               <!--添加调用服务地址-->  
  162.               <add baseAddress="http://localhost:8000/"/>  
  163.             </baseAddresses>  
  164.               
  165.           </host>  
  166.           <!--添加契约接口   contract="WcfDemo.IService1" WcfDemo.IService1为契约接口   binding="wsHttpBinding" wsHttpBinding为通过Http调用-->  
  167.           <endpoint address=""    binding="wsHttpBinding" contract="WcfDemo.IService1"></endpoint>  
  168.         </service>  
  169.           
  170.       </services>  
  171.      <!--定义CalculatorServiceBehavior的行为-->  
  172.      <behaviors>  
  173.         <serviceBehaviors>  
  174.           <behavior name="CalculatorServiceBehavior">  
  175.             <serviceMetadata httpGetEnabled="true"/>  
  176.             <serviceDebug includeExceptionDetailInFaults="false"/>  
  177.               
  178.           </behavior>  
  179.             
  180.         </serviceBehaviors>  
  181.           
  182.       </behaviors>  
  183.     </system.serviceModel>  
  184. </configuration>  
  185.   
  186. 程序运行结果:  
  187.   
  188.   
  189.    
  190. 在服务启动后可通过appConfig中baseAddress节点中的baseAddress地址查看Wcf服务  
  191.   
  192.   
  193.    
  194. 到这服务以及服务主机都已经创建好了下面该创建测试客户机了!  
  195. 新建个WinForm程序做为我们的测试客户机  
  196. 界面两个按钮一个label  
  197.   
  198.   
  199.    
  200. 购买车票:调用wcf服务的BuyTickets()方法  
  201. 查询车票:调用wcf服务的GetRemainingNum()方法  
  202. label用于显示运行信息  
  203. 为项目添加服务引用 地址输入服务主机appconfig中baseAddress地址点击前往(添加服务引用时一点是在服务启动状态下的)  
  204.   
  205.   
  206.    
  207. 后台代码为:  
  208.   
  209. public partial class Form2 : Form  
  210.      {  
  211.         public Form2()  
  212.          {  
  213.              InitializeComponent();  
  214.            
  215.          ServiceReference1.Service1Client TClient = new WinFormsClient.ServiceReference1.Service1Client();  
  216.         //声明客户端调用  
  217.         private void button1_Click(object sender, EventArgs e)  
  218.          {  
  219.             int i = TClient.BuyTickets(2); //调用WCF中的方法  
  220.             if (i == 1)  
  221.              {  
  222.                 this.label1.Text = "购买成功";  
  223.              }  
  224.             this.label1.Text += "剩余车票还有" + TClient.GetRemainingNum().ToString();  
  225.          }  
  226.   
  227.         private void button2_Click(object sender, EventArgs e)  
  228.          {  
  229.             this.label1.Text = "";  
  230.             this.label1.Text = TClient.GetRemainingNum().ToString();//调用WCF中的方法  
  231.          }  
  232.   
  233.         
  234.      }  
  235.   
  236. 点击购买车票时调用wcf的BuyTicket()方法并返回剩余车票的信息  
  237. 点击查看车票时调用wcf的GetRemainingNum()得到剩余车票信息  
  238. 运行结果如下:  
  239. 点击购买车票:  
  240.   
  241.   
  242.   
  243.    
  244. 点击查询票数时:  
  245.   
  246.   
  247.   
  248.     
  249.   
  250. 转自:http://tuibianzhilv001.blog.163.com/blog/static/16756387720109711225423/  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值