• C# 一个WCF简单实例


    以订票为例简单应用wcf

    新建一个wcf服务应用程序


    (C)一个WCF简单实例 - 蜕变之旅 - 蜕变之旅的博客


    在IService1.cs定义服务契约

    复制代码
    代码如下:


    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 { return boolCount; }
    set {
    if
    (HowMany > 0)
    {
    boolCount = false;
    }
    else
    {
    boolCount
    = true;
    }
    }
    }
    [DataMember]
    /*返回票数*/
    public int HowMany

    {
    get { return howmany; }
    set { howmany = value;}
    }
    }
    }


    在Service1.svc中实现契约服务

    复制代码
    代码如下:


    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;
    }
    }
    }
    }

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

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

    (C)一个WCF简单实例 - 蜕变之旅 - 蜕变之旅的博客

    界面上两个按钮:

    启动服务按钮: 用于启动wcf服务
    停止服务按钮: 用于停止wcf服务
    Label: 用于显示服务相关信息
    后台代码为:

    应用命名空间 using System.ServiceModel;
    添加引用 wcf服务生成的dll文件

    复制代码
    代码如下:


    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

    复制代码
    代码如下:


    <?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>


    程序运行结果:

    (C)一个WCF简单实例 - 蜕变之旅 - 蜕变之旅的博客
    在服务启动后可通过appConfigbaseAddress节点中的baseAddress地址查看Wcf服务

    (C)一个WCF简单实例 - 蜕变之旅 - 蜕变之旅的博客


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


    (C)一个WCF简单实例 - 蜕变之旅 - 蜕变之旅的博客


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


    (C)一个WCF简单实例 - 蜕变之旅 - 蜕变之旅的博客
    后台代码为:


    复制代码
    代码如下:


    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)
    {
    this.label1.Text =
    "购买成功";
    }
    this.label1.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()得到剩余车票信息
    运行结果如下:
    点击购买车票:

    (C)一个WCF简单实例 - 蜕变之旅 - 蜕变之旅的博客


    点击查询票数时:


    (C)一个WCF简单实例 - 蜕变之旅 - 蜕变之旅的博客
  • 相关阅读:
    HDU1251 统计难题
    字典树模板
    HDU5536 Chip Factory(01字典树)
    函数的返回值
    函数的使用原则
    文件修改
    函数
    文件内指针移动
    文件操作模式
    字符编码
  • 原文地址:https://www.cnblogs.com/itjeff/p/4487818.html
Copyright © 2020-2023  润新知