• WCF简单实例--用Winform启动和引用


    以订票为例简单应用wcf程序,需要的朋友可以参考下 本篇转自百度文档,自己试过,确实可以用。 
    以订票为例简单应用wcf 
    新建一个wcf服务应用程序

    在IService1.cs定义服务契约

    1. namespace WcfDemo   
    2. {   
    3. // 注意: 如果更改此处的接口名称 "IService1",也必须更新 Web.config 中对 "IService1" 的引用。   
    4. [ServiceContract] // 服务合同 即提供服务的接口或类   
    5. public interface IService1   
    6. {   
    7. [OperationContract]   
    8. /* 增加车票的方法*/   
    9. void AddTicket(int count);   
    10. [OperationContract]   
    11. /*购买车票的方法*/   
    12. int BuyTickets(int Num);   
    13. [OperationContract] //服务契约 即提供服务的实现方法   
    14. /*查询车票的方法*/   
    15. int GetRemainingNum();   
    16. // 任务: 在此处添加服务操作   
    17. }   
    18. // 使用下面示例中说明的数据约定将复合类型添加到服务操作。   
    19. [DataContract] //数据契约   
    20. public class Ticket   
    21. {   
    22. bool boolCount = true;//判断是否还有车票   
    23. int howmany = 10;//还有多少车票   
    24. [DataMember]   
    25. /*判断是否还有票*/   
    26. public bool BoolCalue   
    27. {   
    28. get   
    29.             {  
    30.                 if (HowMany > 0)  
    31.                 {  
    32.                     boolCount = true;  
    33.                 }  
    34.                 else  
    35.                 {  
    36.                     boolCount = false;  
    37.                 }  
    38.   
    39.   
    40.                 return boolCount;   
    41.             }  
    42. }   
    43. [DataMember]   
    44. /*返回票数*/   
    45. public int HowMany   
    46. {   
    47. get { return howmany; }   
    48. set { howmany = value;}   
    49. }   
    50. }   
    51. }   
    namespace WcfDemo 
    { 
    // 注意: 如果更改此处的接口名称 "IService1",也必须更新 Web.config 中对 "IService1" 的引用。 
    [ServiceContract] // 服务合同 即提供服务的接口或类 
    public interface IService1 
    { 
    [OperationContract] 
    /* 增加车票的方法*/ 
    void AddTicket(int count); 
    [OperationContract] 
    /*购买车票的方法*/ 
    int BuyTickets(int Num); 
    [OperationContract] //服务契约 即提供服务的实现方法 
    /*查询车票的方法*/ 
    int GetRemainingNum(); 
    // 任务: 在此处添加服务操作 
    } 
    // 使用下面示例中说明的数据约定将复合类型添加到服务操作。 
    [DataContract] //数据契约 
    public class Ticket 
    { 
    bool boolCount = true;//判断是否还有车票 
    int howmany = 10;//还有多少车票 
    [DataMember] 
    /*判断是否还有票*/ 
    public bool BoolCalue 
    { 
    get 
                {
                    if (HowMany > 0)
                    {
                        boolCount = true;
                    }
                    else
                    {
                        boolCount = false;
                    }
    
    
                    return boolCount; 
                }
    } 
    [DataMember] 
    /*返回票数*/ 
    public int HowMany 
    { 
    get { return howmany; } 
    set { howmany = value;} 
    } 
    } 
    } 
    

    在Service1.svc中实现契约服务

    1. namespace WcfDemo   
    2. {   
    3. // 注意: 如果更改此处的类名“Service1”,也必须更新 Web.config 和关联的 .svc 文件中对“Service1”的引用。   
    4. public class Service1 : IService1   
    5. {   
    6. Ticket T=new Ticket();   
    7. /*实现添加票数的方法*/   
    8. public void AddTicket(int count)   
    9. {   
    10. T.HowMany=T.HowMany+count;   
    11. }   
    12. /*实现返回票数的方法*/   
    13. public int GetRemainingNum()   
    14. {   
    15. return T.HowMany;   
    16. }   
    17. /*实现购买车票的方法*/   
    18. public int BuyTickets(int Num)   
    19. {   
    20. if (T.BoolCalue)   
    21. {   
    22. T.HowMany = T.HowMany - Num;   
    23. return 1;   
    24. }   
    25. else   
    26. {   
    27. return 0;   
    28. }   
    29. }   
    30. }   
    31. }   
    namespace WcfDemo 
    { 
    // 注意: 如果更改此处的类名“Service1”,也必须更新 Web.config 和关联的 .svc 文件中对“Service1”的引用。 
    public class Service1 : IService1 
    { 
    Ticket T=new Ticket(); 
    /*实现添加票数的方法*/ 
    public void AddTicket(int count) 
    { 
    T.HowMany=T.HowMany+count; 
    } 
    /*实现返回票数的方法*/ 
    public int GetRemainingNum() 
    { 
    return T.HowMany; 
    } 
    /*实现购买车票的方法*/ 
    public int BuyTickets(int Num) 
    { 
    if (T.BoolCalue) 
    { 
    T.HowMany = T.HowMany - Num; 
    return 1; 
    } 
    else 
    { 
    return 0; 
    } 
    } 
    } 
    } 
    

    编译后生成WcfDemo.dll

    添加宿主程序用于监测服务 

    添加WinForm项目加入解决方案  界面如下图:

    界面上两个按钮:  启动服务按钮: 用于启动wcf服务  停止服务按钮: 用于停止wcf服务  Label: 用于显示服务相关信息  后台代码为:  应用命名空间 using System.ServiceModel;  添加引用 wcf服务生成的dll文件 WcfDemo.dll

    1. public partial class Form1 : Form   
    2. {   
    3. public Form1()   
    4. {   
    5. InitializeComponent();   
    6. }   
    7. ServiceHost host = null;//定义 ServiceHost   
    8. private void button1_Click(object sender, EventArgs e)   
    9. {   
    10. host = new ServiceHost(typeof(WcfDemo.Service1));//WcfDemo.Service1 为引用的dll中的服务   
    11. host.Open();//启动服务   
    12. this.label1.Text = "服务已启动";   
    13. }   
    14.   
    15. private void button2_Click(object sender, EventArgs e)   
    16. {   
    17. if (host.State != CommunicationState.Closed)//判断服务是否关闭   
    18. {   
    19. host.Close();//关闭服务   
    20. }   
    21. this.label1.Text = "服务已关闭";   
    22. }   
    23. }   
    public partial class Form1 : Form 
    { 
    public Form1() 
    { 
    InitializeComponent(); 
    } 
    ServiceHost host = null;//定义 ServiceHost 
    private void button1_Click(object sender, EventArgs e) 
    { 
    host = new ServiceHost(typeof(WcfDemo.Service1));//WcfDemo.Service1 为引用的dll中的服务 
    host.Open();//启动服务 
    this.label1.Text = "服务已启动"; 
    } 
    
    private void button2_Click(object sender, EventArgs e) 
    { 
    if (host.State != CommunicationState.Closed)//判断服务是否关闭 
    { 
    host.Close();//关闭服务 
    } 
    this.label1.Text = "服务已关闭"; 
    } 
    } 

    接下来配置app.config

    1. <?xml version="1.0" encoding="utf-8" ?>   
    2. <configuration>   
    3. <system.serviceModel>   
    4. <services><!--添加服务-->   
    5. <service name="WcfDemo.Service1" behaviorConfiguration="CalculatorServiceBehavior">   
    6. <!--name 必须与代码中的host实例初始化的服务一样   
    7. behaviorConfiguration 行为配置 -->   
    8. <host>   
    9. <baseAddresses>   
    10. <!--添加调用服务地址-->   
    11. <add baseAddress="http://localhost:8000/"/>   
    12. </baseAddresses>   
    13.   
    14. </host>   
    15. <!--添加契约接口 contract="WcfDemo.IService1" WcfDemo.IService1为契约接口 binding="wsHttpBinding" wsHttpBinding为通过Http调用-->   
    16. <endpoint address="" binding="wsHttpBinding" contract="WcfDemo.IService1"></endpoint>   
    17. </service>   
    18.   
    19. </services>   
    20. <!--定义CalculatorServiceBehavior的行为-->   
    21. <behaviors>   
    22. <serviceBehaviors>   
    23. <behavior name="CalculatorServiceBehavior">   
    24. <serviceMetadata httpGetEnabled="true"/>   
    25. <serviceDebug includeExceptionDetailInFaults="false"/>   
    26.   
    27. </behavior>   
    28.   
    29. </serviceBehaviors>   
    30.   
    31. </behaviors>   
    32. </system.serviceModel>   
    33. </configuration>   
    <?xml version="1.0" encoding="utf-8" ?> 
    <configuration> 
    <system.serviceModel> 
    <services><!--添加服务--> 
    <service name="WcfDemo.Service1" behaviorConfiguration="CalculatorServiceBehavior"> 
    <!--name 必须与代码中的host实例初始化的服务一样 
    behaviorConfiguration 行为配置 --> 
    <host> 
    <baseAddresses> 
    <!--添加调用服务地址--> 
    <add baseAddress="http://localhost:8000/"/> 
    </baseAddresses> 
    
    </host> 
    <!--添加契约接口 contract="WcfDemo.IService1" WcfDemo.IService1为契约接口 binding="wsHttpBinding" wsHttpBinding为通过Http调用--> 
    <endpoint address="" binding="wsHttpBinding" contract="WcfDemo.IService1"></endpoint> 
    </service> 
    
    </services> 
    <!--定义CalculatorServiceBehavior的行为--> 
    <behaviors> 
    <serviceBehaviors> 
    <behavior name="CalculatorServiceBehavior"> 
    <serviceMetadata httpGetEnabled="true"/> 
    <serviceDebug includeExceptionDetailInFaults="false"/> 
    
    </behavior> 
    
    </serviceBehaviors> 
    
    </behaviors> 
    </system.serviceModel> 
    </configuration> 
    

    程序运行结果:

    在服务启动后可通过appConfig中baseAddress节点中的baseAddress地址查看Wcf服务

    到这服务以及服务主机都已经创建好了下面该创建测试客户机了! 新建个WinForm程序做为我们的测试客户机 界面两个按钮一个label

    购买车票:调用wcf服务的BuyTickets()方法 查询车票:调用wcf服务的GetRemainingNum()方法 label用于显示运行信息 为项目添加服务引用 地址输入服务主机appconfig中baseAddress地址点击前往(添加服务引用时一点是在服务启动状态下的) 后台代码为:

    1. public partial class Form2 : Form   
    2. {   
    3. public Form2()   
    4. {   
    5. InitializeComponent();   
    6. }   
    7. ServiceReference1.Service1Client TClient = new WinFormsClient.ServiceReference1.Service1Client();   
    8. //声明客户端调用   
    9. private void button1_Click(object sender, EventArgs e)   
    10. {   
    11. int i = TClient.BuyTickets(2); //调用WCF中的方法   
    12.             if (i == 1)  
    13.             {  
    14.                 lblResult.Text = "购买成功.";  
    15.                 lblResult.Text += "剩余车票还有" + TClient.GetRemainingNum().ToString();  
    16.             }  
    17.             else  
    18.             {  
    19.                 lblResult.Text = "购买Fail.";  
    20.                 lblResult.Text += "剩余车票还有" + TClient.GetRemainingNum().ToString();  
    21.             }   
    22. }   
    23. private void button2_Click(object sender, EventArgs e)   
    24. {   
    25. this.label1.Text = "";   
    26. this.label1.Text = TClient.GetRemainingNum().ToString();//调用WCF中的方法   
    27. }   
    28. }   
    public partial class Form2 : Form 
    { 
    public Form2() 
    { 
    InitializeComponent(); 
    } 
    ServiceReference1.Service1Client TClient = new WinFormsClient.ServiceReference1.Service1Client(); 
    //声明客户端调用 
    private void button1_Click(object sender, EventArgs e) 
    { 
    int i = TClient.BuyTickets(2); //调用WCF中的方法 
                if (i == 1)
                {
                    lblResult.Text = "购买成功.";
                    lblResult.Text += "剩余车票还有" + TClient.GetRemainingNum().ToString();
                }
                else
                {
                    lblResult.Text = "购买Fail.";
                    lblResult.Text += "剩余车票还有" + TClient.GetRemainingNum().ToString();
                } 
    } 
    private void button2_Click(object sender, EventArgs e) 
    { 
    this.label1.Text = ""; 
    this.label1.Text = TClient.GetRemainingNum().ToString();//调用WCF中的方法 
    } 
    } 

    点击购买车票时调用wcf的BuyTicket()方法并返回剩余车票的信息  点击查看车票时调用wcf的GetRemainingNum()得到剩余车票信息  运行结果如下:  点击购买车票: 

    点击查询票数时:

    详细出处参考:http://www.jb51.net/article/31639.htm

  • 相关阅读:
    tomcat 添加用户名和密码
    linux系统下获取cpu、硬盘、内存使用率
    snmp 企业对应的mib编号
    String加密解密 2017.07.26
    Mongo日期
    linux sed 批量替换多个文件中的字符串
    Python和giL的关系
    vim
    乌班图
    Python
  • 原文地址:https://www.cnblogs.com/yelanggu/p/8311195.html
Copyright © 2020-2023  润新知