代码改变世界

(原创)用参数传文本

2013-04-10 18:59  Keiven_LY  阅读(220)  评论(0编辑  收藏  举报

5.1 项目说明

该实例的服务宿主为控制台应用程序,客户端为Windows窗体应用程序。

5.2 项目架构

5.3 项目开发过程

第一步:创建一个空的解决方案,命名为“WCFTest_7”,(可以任意取名);

第二步:在上述解决方案中,文件——>添加——>新建项目,选择控制台应用程序,取名Host,这个控制台程序用来作为服务的宿主程序;

第三步:在解决方案中,右键Host——>添加——>新建项,选择WCF服务,取名TextService,系统自动生成ITextService.cs、TextService.cs、App.config。其中ITextService.cs为接口,在此添加契约,相当于web service中的methord;TextService.cs为契约的实现方法;

 

ITextService.cs中的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace Host
{
    // 注意: 如果更改此处的接口名称 "ITextService",也必须更新 App.config 中对 "ITextService" 的引用。
    [ServiceContract]
    public interface ITextService
    {
        [OperationContract]
        void DoWork();       //这个是默认的,不需要管

//下面定义了三个契约,分别表示:紧急广播,广播和MP3播放功能
        [OperationContract]
        string Alern(string value);

        [OperationContract]
        string Broadcast(int id_1, int id_2);

        [OperationContract]
        string MP3(int id_1, int id_2);
    }
}

TextService.cs中的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace Host
{
    // 注意: 如果更改此处的类名 "TextService",也必须更新 App.config 中对 "TextService" 的引用。
    public class TextService : ITextService
    {
        public void DoWork()
        {
        }                          //这个是默认的,不需要管
//下面是实现三个契约的方法,分别表示:紧急广播,广播和MP3播放功能
        public string Alern(string value)
        {
            return value;
        }
        public string Broadcast(int id_1, int id_2)         //注意参数设置
        {
            return string.Format("你所输入的节点{0}区{1}号,广播调用成功!", id_1, id_2);
        }
        public string MP3(int id_1, int id_2)               //注意参数设置
        {
            return string.Format("你所输入的节点{0}区{1}号,MP3播放成功!", id_1, id_2);
        }
    }
}

App.config文件原则上可以不用改,但是address太长了

(默认的为baseAddress=http://localhost:8731/Design_Time_Addresses/Host/TextService/

修改为baseAddress=http://localhost:8731/TextService/

 

修改Program.cs中的代码:

using System;
using System.ServiceModel;  //这里需要添加引用
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Host
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServiceHost host = new ServiceHost(typeof(Host.TextService)))
            {

                host.Open();
                Console.ReadLine();
                host.Close();

            }
        }
    }
}

第四步:保存,启动项目,系统在项目保存文件夹下自动生成Host.exe ,路径为:项目保存文件夹——>Host——>bin——>Debug——>Host.exe,双击Host.exe文件,启动服务;

第五步:添加客户端应用程序,文件——>添加——>新建项目——>Windows,选择Windows窗体应用程序,取名TextClient。接下来设计用户计算器界面如下:

接下来,添加服务引用,将服务端的地址填入地址(A)栏,点击前往,出现TextService服务,修改命名空间为TextService,如下图,点击“确定”即可

接下来,双击界面上的三个Button按钮,转到Button的click事件,整个代码如下:

using System;
using System.ServiceModel;   //这个必须添加
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TextClient
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }
        private void button1_Click(object sender, EventArgs e)
        {
            using (TextService.TextServiceClient proxy_1 = new TextService.TextServiceClient())  //创建代理,用于连接服务器
            {
                label3.Text = proxy_1.Alern("全区进入紧急状况!!");
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            using (TextService.TextServiceClient proxy_2 = new TextService.TextServiceClient())  //创建代理,用于连接服务器
            {
                label3.Text = proxy_2.Broadcast(Convert.ToInt32(this.txt1.Text), Convert.ToInt32(this.txt2.Text));
            }
        }
        private void button3_Click(object sender, EventArgs e)
        {
            using (TextService.TextServiceClient proxy_3 = new TextService.TextServiceClient())  //创建代理,用于连接服务器
            {
                label3.Text = proxy_3.MP3(Convert.ToInt32(this.txt1.Text), Convert.ToInt32(this.txt2.Text));
            }
        }
    }
}

5.4 运行结果

单击“紧急广播”按钮,显示结果:

在文本框中输入节点号后,单击“广播”按钮,显示结果:

在文本框中输入节点号后,单击“MP3”按钮,显示结果: