本文实例讲述了WCF实现的计算器功能。分享给大家供大家参考,具体如下:

对于WCF,我们有了前面的理论基础,今天通过一个计算器的实例主要给大家讲解怎么一步一步地创建一个完整的WCF应用。
一、创建整个解决方案
Calculator.Service:一个类库项目,定义服务契约(Service Contract),应用System.ServiceModel程序集;提供对WCF服务的实现。
Calculator.Host:一个Windows窗体应用程序,实现对定义在Calculator.Service项目中的服务的寄宿,该项目需要引用Calculator.Service项目和System.ServiceModel程序集。
Calculator.Client:一个Windows窗体应用程序模拟服务的客户端,该项目应用System.ServiceModel程序集。
二、创建服务契约
一般,我们通过接口的形式定义服务契约。通过下面的代码,将一个接口ICalculator定义成服务契约。我们通过在接口上应用System.ServiceModel.ServiceContractAttribute特性将一个接口定义成服务契约。
将接口定义成服务契约后,接口的方法成员并不能自动成为服务的操作。我们需要在相应的操作方法上面显式地应用OperationContractAttribute特性。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
namespace Calculator.Service
{
[ServiceContract]
public interface ICalculator
{
[OperationContract]
double Add(double x, double y);
[OperationContract]
double Subtract(double x, double y);
[OperationContract]
double Multiply(double x, double y);
[OperationContract]
double Divide(double x, double y);
}
}
三、创建服务
当服务契约创建成功后,我们需要通过实现服务契约来创建具体的WCF服务,WCF服务CalculatorService实现了服务契约的接口ICalculator,实现了所有的服务操作。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Calculator.Service
{
public class CalculatorService:ICalculator
{
public double Add(double x, double y)
{
return x + y;
}
public double Subtract(double x, double y)
{
return x - y;
}
public double Multiply(double x, double y)
{
return x * y;
}
public double Divide(double x, double y)
{
return x / y;
}
}
}
四、通过自我寄宿的方式寄宿服务
服务寄宿的目的就是开启一个进程,为WCF服务提供一个运行的环境。通过为服务添加一个或多个中级诶单,使之暴露给潜在的服务消费者。服务消费者最终通过相匹配的终结点对该服务进行调用。我们完全可以通过代码的方式完成所有的服务寄宿工作。
using Calculator.Service;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.Text;
using System.Windows.Forms;
namespace Calculator.Host
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
ServiceHost host = null;
private void btnOpen_Click(object sender, EventArgs e)
{
host = new ServiceHost(typeof(CalculatorService));
host.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "http://localhost:8008/Calculator");
if (host.Description.Behaviors.Find<ServiceMetadataBehavior>()==null)
{
ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
behavior.HttpGetEnabled = true;
behavior.HttpGetUrl = new Uri("http://localhost:8008/Calculator/metadata");
host.Description.Behaviors.Add(behavior);
}
host.Opened += delegate { label1.Text = "服务已经启动!"; };
host.Open();
}
private void btnClose_Click(object sender, EventArgs e)
{
if (host.State != CommunicationState.Closed)
{
host.Closed += delegate { label1.Text = "服务已经停止!"; };
host.Close();
}
}
}
}
五、创建客户端调用服务
服务被成功寄宿后,服务端便开始了服务调用请求的监听工作。此外,服务寄宿将服务描述通过元数据的形式发布出来,相应的客户端就可以获取这些元数据,创建爱你客户端程序进行服务的消费。在VS下,当我们添加服务引用的时候,VS在内部帮我们实现元数据的获取,并借组这些元数据通过代码生成工具自动生成用于服务调用的服务代理相关代码和相应的配置。
我们可以创建CalculatorClient对象,执行相应方法调用服务操作。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Calculator.Client
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
comboBox1.Text = "+";
}
private void button1_Click(object sender, EventArgs e)
{
CalculatorService.CalculatorClient client = new CalculatorService.CalculatorClient();
double x = Convert.ToDouble (textBox1.Text);
double y = Convert.ToDouble(textBox2.Text);
double result=0;
string operater = comboBox1.Text;
switch (operater )
{
case "+":
result = client.Add(x, y);
break;
case "-":
result = client.Subtract(x, y);
break;
case "*":
result = client.Multiply(x, y);
break;
case "/":
if (y==0)
{
MessageBox.Show("除数不能为0!");
return;
}
result = client.Divide(x, y);
break;
}
label1.Text = textBox1.Text + comboBox1.Text + textBox2.Text + " = " + Convert.ToString(result);
}
}
}
在这个计算器实例中,我们实现了一个简单的计算服务(CalculatorService),提供基本的加、减、乘、除的运算。客户端和服务通过运行在不同进程模拟,体现了客户端和服务端进程互相调用的关系。
PS:这里再为大家推荐几款在线计算工具供大家参考使用:
在线一元函数(方程)求解计算工具:
http://tools./jisuanqi/equ_jisuanqi
科学计算器在线使用_高级计算器在线计算:
http://tools./jisuanqi/jsqkexue
在线计算器_标准计算器:
http://tools./jisuanqi/jsq
更多关于C#相关内容感兴趣的读者可查看本站专题:《C#常见控件用法教程》、《C#窗体操作技巧汇总》、《C#数据结构与算法教程》、《C#面向对象程序设计入门教程》及《C#程序设计之线程使用技巧总结》
希望本文所述对大家C#程序设计有所帮助。
# WCF
# 计算器
# C#计算器编写代码
# C#实现Winform版计算器
# C#日历样式的下拉式计算器实例讲解
# c#入门之实现简易存款利息计算器示例
# C#编写的windows计算器的实例代码
# C# 一个WCF简单实例
# WCF配置心得
# WinForm窗体调用WCF服务窗体卡死问题
# C# WCF简单入门图文教程(VS2010版)
# 总结C#动态调用WCF接口的两种方法
# 客户端
# 程序设计
# 实现了
# 给大家
# 该项目
# 服务端
# 应用程序
# 相关内容
# 在这个
# 多个
# 感兴趣
# 我们可以
# 数据结构
# 可以通过
# 当我们
# 并不能
# 使之
# 能为
# 提供一个
# 更多关于
相关文章:
如何在宝塔面板中创建新站点?
沈阳制作网站公司排名,沈阳装饰协会官方网站?
如何在IIS管理器中快速创建并配置网站?
如何安全更换建站之星模板并保留数据?
如何通过cPanel快速搭建网站?
建站之星会员如何解锁更多建站功能?
建站与域名管理如何高效结合?
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
如何快速重置建站主机并恢复默认配置?
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
php json中文编码为null的解决办法
如何解决VPS建站LNMP环境配置常见问题?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
建站之星安装提示数据库无法连接如何解决?
建站为何优先选择香港服务器?
网站按钮制作软件,如何实现网页中按钮的自动点击?
如何续费美橙建站之星域名及服务?
独立制作一个网站多少钱,建立网站需要花多少钱?
建站之星免费模板:自助建站系统与智能响应式一键生成
黑客如何通过漏洞一步步攻陷网站服务器?
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
如何快速使用云服务器搭建个人网站?
魔方云NAT建站如何实现端口转发?
建站主机数据库如何配置才能提升网站性能?
C#如何使用XPathNavigator高效查询XML
常州企业建站如何选择最佳模板?
江苏网站制作公司有哪些,江苏书法考级官方网站?
南宁网站建设制作定制,南宁网站建设可以定制吗?
焦点电影公司作品,电影焦点结局是什么?
建站之星展会模版如何一键下载生成?
建站之星如何实现PC+手机+微信网站五合一建站?
建站之星展会模板:智能建站与自助搭建高效解决方案
高端建站三要素:定制模板、企业官网与响应式设计优化
教学论文网站制作软件有哪些,写论文用什么软件
?
头像制作网站在线制作软件,dw网页背景图像怎么设置?
如何确保西部建站助手FTP传输的安全性?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?
建站之星图片链接生成指南:自助建站与智能设计教程
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
b2c电商网站制作流程,b2c水平综合的电商平台?
实例解析angularjs的filter过滤器
如何有效防御Web建站篡改攻击?
宝塔建站无法访问?如何排查配置与端口问题?
C++中引用和指针有什么区别?(代码说明)
网站制作壁纸教程视频,电脑壁纸网站?
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
,网站推广常用方法?
*请认真填写需求信息,我们会在24小时内与您取得联系。