关闭

(C#)一个WCF简单实例

1089人阅读 评论(0) 收藏 举报
分类:

以订票为例简单应用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中的方法 } }
复制代码

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

 

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

 
点击查询票数时:

(C)一个WCF简单实例 - 蜕变之旅 -             蜕变之旅的博客
1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

C# 一个WCF简单实例

WCF实例(带步骤)  复制代码代码如下:   本篇转自百度文档,自己试过,确实可以用。  以订票为例简单应用wcf  新建一个wcf服务应用程序 ...
  • albert528108
  • albert528108
  • 2013-09-03 16:44
  • 3159

一个简单的WCF实例

1 新建空解决方案WCFExample 在解决方案WCFExample下新建以下项目: Service(输出类型为“类库”):WCF服务程序。Business(输出类型为“类库”):供WC...
  • tiana0
  • tiana0
  • 2014-03-08 21:55
  • 3234

Winfrom 使用WCF 实现双工通讯

WCF实现的双工通信
  • hotmee
  • hotmee
  • 2016-10-28 09:48
  • 2231

.Net中WebService和WCF的使用示例

先简单创建一个DBHelper类 using System; using System.Collections.Generic; using System.Linq; using System...
  • Denghejing
  • Denghejing
  • 2016-08-18 12:03
  • 2111

动态调用WCF地址 (使用ChannelFactory类)

动态调用WCF地址 (使用ChannelFactory类) 最近在做的一个项目中需要动态调用WCF地址,因为有很多终端服务器,而每台终端服务器上都部署一个WCF服务,中央服务器需要不定时调用其中...
  • liuruxin
  • liuruxin
  • 2013-12-11 12:04
  • 3936

不引用服务而使用WCF,手动编写客户端代理类

我们之所以说WCF比一般的Web Service要强大得多,是因为它要比一般的Web服务要灵活得多,而且它不仅仅能在IIS服务器上运行,其实它可以用很多种方法来运行,哪怕一个控制台应用程序。 现在,...
  • u011854789
  • u011854789
  • 2016-07-11 10:36
  • 1289

C#游戏编程之创建一个简单的卷轴射击游戏

前几天很多朋友要求贴一篇有关C#游戏开发的实例。本篇文章是创建一个简单的卷轴射击游戏开发实例,内容比较完整,分享给大家,不过篇幅有些长,可以慢慢看哈!本文除CSDN博客外,任何媒体和出版物禁止转载和使...
  • qinghuawenkang
  • qinghuawenkang
  • 2013-01-14 09:05
  • 40689

WCF使用安全证书验证消息加密

WCF使用安全证书验证消息加密
  • whl632359961
  • whl632359961
  • 2016-06-17 11:05
  • 1670

VS 2010中使用C#创建及调用WCF完整实例(Windows服务宿主)

一个傻瓜式的Windows服务宿主模式下的WCF的完整示例 只注重于实现,不讲理论
  • meerio
  • meerio
  • 2015-10-26 21:49
  • 5207

一个简单的WCF开发实例

前几天听说FastReport支持了WCF服务,很惊喜。看了几篇文章了解了一下,原来是增加了一个FastReport.Service.dll库,WCF开发最后还是要自己来。找到一个实例给大家分享一下,...
  • u011569710
  • u011569710
  • 2013-08-05 11:08
  • 544
    个人资料
    • 访问:624779次
    • 积分:6935
    • 等级:
    • 排名:第3233名
    • 原创:68篇
    • 转载:18篇
    • 译文:6篇
    • 评论:4条
    博客专栏