WCF 程序入门
WCF是微软公司推出的符合SOA思想的分布式应用程序技术框架和编程模型,是建立在消息通信这一概念基础上运行的一个运行时服务系统。
WCF编程模型的目标是实现以下两个实体之间的通信:WCF服务端和WCF客户端。该编程模型封装在.NET框架的System.SericeModel命名空间中。
利用WCF,开发人员不再根据不同的需求分别选择不同的模型,而是只用一种模型,就可以用统一的格式和用法编写各种网络应用程序,从而构建安全的,可靠的,跨平台(包括Windows平台和非Windows平台)的分布式解决方案。
一 WCF示例
1 创建服务端项目和客户端项目
一般为了方便调试和观察,一般在同一个解决方案中既包括WCF服务端应用程序项目,也包括客户端应用程序项目。但是,在实际的项目开发中,由于用【WCF服务应用程序】模板创建的服务是通过IIS单独部署的,所以应分别用不同的解决方案来实现。
(1)选择【WPF应用程序】模板,新建一个客户端应用程序项目。解决方案名WcfServiceTest,项目名为Client。
(2)创建服务端
在【解决方案管理器】中,右键单击解决方案名,选择【添加】-->【新建项目】,在弹出的窗口中选择【WCF服务应用程序】模板,单击【确定】,此时系统会自动添加对System.ServiceModel命名空间的引用,并自动在该项目中生成一下文件。
- IService.cs:用接口定义服务协定和数据协定
- Service.svc和Service.svc.cs:实现IService1接口中声明的服务操作
- Web.config:服务器端配合文件,用于定义服务行为以及绑定的协议等
(3)添加新服务(可选)
如果不希望使用默认的WCF服务Service1,可以利用【重构】将其替换成其他名称,或者删除IService.cs,IService.svc,IService.svc.cs,然后按照下面的方法创建或添加新服务。右击项目名,选择【添加】-->【WCF服务】命令,在弹出的窗口中将【项名称】改为新的WCF服务名称,单击【确定】按钮。
2 编写服务端代码
此部分的主要工作就是设计和实现协定,包括服务协定,数据协定以及消息协定。
服务协定用ServiceContract特性来声明,用接口来定义。在借口内部,用方法及其参数声明服务提供的操作,在接口中声明的这些方法统称为“操作方法”。注意在服务协定中只能声明操作方法,不允许声明属性和字段。
(1)定义接口(IService.cs)
[ServiceContract]
public interface IService1
{
// TODO: 在此添加您的服务操作 [OperationContract] string SayHello(string name);
[OperationContract] double Add(double d1, double d2);
[OperationContract] double Divide(double d1, double d2);
}
(2)实现接口声明的操作方法(Service.svc.cs)
public class Service1 : IService1
{
public string SayHello(string name)
{
return string.Format("Hello, {0}", name);
} public double Add(double d1, double d2)
{
return d1 + d2;
} public double Divide(double d1, double d2)
{
return d1 / d2;
}
}
代码编写完毕后,右键单击WcfService项目名,选择【生成】或【重新生成】,以确保没有语法错误。
3 修改服务端配置
(1)修改绑定配置(Web.config)文件,找到protocolMapping配置节,在其上方添加以下代码:
<bindings>
<basicHttpBinding>
<binding name ="b1" transferMode ="Buffered" textEncoding="utf-8" messageEncoding ="Text">
<security mode="None" />
</binding>
</basicHttpBinding>
</bindings>
将protocolMapping配置节的代码改为一下内容:
<protocolMapping>
<add binding="basicHttpBinding" scheme="http"/>
</protocolMapping>
在protocolMapping配置节的下方添加以下代码:
<services>
<service name="WcfService1.Service1">
<endpoint binding="basicHttpBinding" bindingConfiguration="b1" contract="WcfService1.IService1" />
</service>
</services>
(2)开通调试功能
在Web.config中找到includeExceptionDetailInFaults,将其改为true。
<!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
<serviceDebug includeExceptionDetailInFaults="true"/>
4 测试服务(可选)
用【WCF应用程序】模板创建WCF服务后,如果需要,可以直接利用【WCF测试客户端】来测试每个服务操作。
右击WcfService文件名,选择【设为启动项目】命令,并选中要测试的Service.svc文件名(测试那个服务就选中哪个.svc文件),然后按<F5>调试运行,此时系统会自动弹出WCF测试客户端。
测试结束后,要再将WPF应用程序设为启动项目。
5 在服务端添加引用
(1)确保服务已经启动
单击WcfService项目,选择【生成】或【重新生成】,若WCF服务没有启动,则会失败。
(2)查找引用的服务
单击Client项目中的【引用】-->【添加服务引用】,在弹出的对话框中,单击【发现】,此时会自动找到与该项目在同一个解决方案中俄的WCF服务
(3)生成客户端代码
using Client.ServiceReference1;
private void btn1_Click(object sender, RoutedEventArgs e)
{
textBlock1.Text = "客户端调用sayhello方法,服务端返回:\n";
//创建服务客户端
Service1Client client = new Service1Client();
//调用服务
string s = client.SayHello("欢迎学习WCF!");
//关闭服务客户端并清理资源
client.Close();
textBlock1.Text += s;
}
WCF 程序入门的更多相关文章
- WCF分分钟入门
近来学习wcf,总结了一下入门的经验,小白的入门篇,也方便以后复习,省的去查质料. 第一步:创建wcf程序,程序初始化有一个接口和一个实现类写个简单的返回方法就可以了: 第二步:创建一个宿主,也就是服 ...
- C#面向服务编程技术WCF从入门到实战演练
一.WCF课程介绍 1.1.Web Service会被WCF取代吗? 对于这个问题阿笨的回答是:两者在功能特性上却是有新旧之分,但是对于特定的系统,适合自己的就是最好的.不能哪一个技术框架和行业标准作 ...
- 天河微信小程序入门《四》:融会贯通,form表单提交数据库
天河在阔别了十几天之后终于又回来了.其实这篇文章里的demo是接着(天河微信小程序入门<三>)后面就做了的,但是因为最近在做别的项目,所以就偷懒没有发出来.放到今天来看,从前台提交数据到数 ...
- 天河微信小程序入门《三》:打通任督二脉,前后台互通
原文链接:http://www.wxapp-union.com/forum.php?mod=viewthread&tid=505&extra=page%3D1 天河君在申请到https ...
- 天河微信小程序入门:阿里云tomcat免费配置https
天河君在第一时间通过了微信小程序验证,开启了我的微信小程序之旅.因为天河君之前是一名后端狗,对前端不是很了解,所以几乎可以认为是从零开始学做微信小程序.也希望有志在微信小程序方向做点事情的朋友能够和我 ...
- 我的微信小程序入门踩坑之旅
前言 更好的阅读体验请:我的微信小程序入门踩坑之旅 小程序出来也有一段日子了,刚出来时也留意了一下.不过赶上生病,加上公司里也有别的事,主要是自己犯懒,就一直没做.这星期一,赶紧趁着这股热乎劲,也不是 ...
- 微信小程序入门正确姿势(一)
[未经作者本人同意,请勿以任何形式转载] >>>前言 这是 [认真学编程] 系列的 第4篇 文章(微信小程序入门系列),欢迎点赞分享.写留言,这些都是对我最好的支持. 本系列适合有一 ...
- WCF初探-2:手动实现WCF程序
1.前言 上一篇,我们通过VS自带的模板引擎自动生成了一个wcf程序,接下来我们将手动实现一个wcf程序.由于应用程序开发中一般都会涉及到大量的增删改查业务,所以这个程序将简单演示如何在wcf中构建简 ...
- 汇编语言程序入门实验一:在dos下对用户输入作出应答
汇编语言程序入门实验一:在dos下对用户输入作出应答 1,背景 成功预言了今天要上计算机操作系统上机实验课,昨天预习后,今天的两个上机实验做得很成功.但是也有一些问题.问题1:学校的系统目前是wind ...
随机推荐
- FusionCharts和highcharts 饼图区别!
FusionCharts ---------------脚本--------------- <script src="../../../fashioncharts/js/FusionC ...
- IDEA构建一个mybatis项目
目录结构如下: 在pom.xml中配置需要的jar包 <dependencies> <dependency> <groupId>org.mybatis</gr ...
- IP地址,子网掩码,默认网关,DNS服务器知识详解(转)
转自:http://www.cnblogs.com/JuneWang/p/3917697.html 为了更深入的学习TCP/IP协议,最近看了不少有关资料,收集整理记录如下,以备后面的使用和方便各位学 ...
- thinkphp 3.2.3 session 丟失問題
之前做的几个 站session在跨页时也不会丢失(都在同一台服务器,所以我排除了服务器配置问题),这次居然很奇怪的发生的,在火狐上有,在ie, 谷哥上没有session,看了很多网上的贴子 其中有一个 ...
- 关于P,V操作理解的突破,关于并发设计与并行
今天又找了一篇博客研究P,V操作.. 发现..它有一个变量没有声明.. 我就换了篇博客..http://c.biancheng.net/cpp/html/2600.html 然后就看懂了.. 关键突破 ...
- vue-loader配合webpack的使用及安装
vue-loader配合webpack的使用及安装: 工程文件简单的目录结构 index.html main.js 入口文件 App.vue vue文件,官方推荐命名法 package.jso ...
- js判断当前页面在移动设备还是在PC端中打开
方法一: var isPC = function () { var userAgentInfo = navigator.userAgent.toLowerCase(); var Agents = ne ...
- pyqt的信号槽机制(转)
PySide/PyQt Tutorial: Creating Your Own Signals and Slots This article is part 5 of 8 in the series ...
- QT生成流水账号
在做数据库课程的时候,要生成财务表,每条记录应该有一个流水账号. 实现思路: 当前时间+随机一个四位数 上代码 //生成流水号 QString adminRecharge::getNumber() { ...
- dvd管理系统
>>>>>>>>>>>>>>>>>>>> 语言:java 工具:eclipse ...