WCF学习日记
图书馆借阅了《WCF高级编程》,从6.11开始学习wcf,希望尽快熟悉原理和编程模型以及常用编程方法。
WCF是一个平台,也是一个框架,从Net.3.0 就在Net framework(无需安装) 。WCF将服务以SOA架构对外使用。SOA的宗旨就是让应用程序成为一个接口可以供其余程序使用。比如图书订单管理系统,订单履约系统,ship系统,会计系统,以及其它系统,每个都是一个独立的系统,但是彼此系统应该作为接口供别人使用,这样即使扩展了服务或者改善了服务也不会影响原先的体系架构和业务规则。
WCF类似之前的ASP.NET 服务(*.asmx)和remoting,还有ws(web服务增强,MSMQ微软消息队列等)。 remoting都是在远端建立对象,而不是在本地建立对象。
下面是WCF中的一些概念以及原理
- 1.契约
- 数据契约
消息契约 soap信封,soap头,soap体
服务契约
行为契约
契约就相当于现实生活中的合同。假如买方和卖方之间的合同,需要对产品的质地和零件有限制(数据契约),消息契约(产品完成后,怎样将所有产品交到我手里,物流公司还是卖家自有的车送上门还是买家上门取),服务契约约定卖家要提供什么服务。
2.编程模型
面向服务编程 (松耦合编程,但是同样要面向对象)。而面向对象编程很多类耦合比较小(紧耦合),所有类更同组成一个系统。
服务要自治 自己管理自己,要注意版本控制
编程用到 System.ServiceModel; 注意net2.0 以下无法引用到此类库,引用窗口找不到。只要net 3.0以上的才可以引用,一定要注意项目的生成版本是什么版本必须3.0以上。
3种编程。声明式编程(接口或类上添加属性特性来编程),显示编程(diy code),配置文件(好处不用重新编译,但是如果是在IIS中应该会断掉服务把)
3.宿主
windows active service ---windows激活服务,装有此服务上的计算机上可以自动启动wcf 服务
可以做为exe可执行程序启动
windows 服务
msmq???
4. net 3.0 推出system.transaction事务,可以向数据库一样将代码集合作为一个整体提交或者回滚。
事务的4要素:原子,一致,永久,
---------------------------------------------------------------------------------------------
开始编程-
下面是根据书中的代码做的例子
新建网站2.0下的空web服务(删除*.asmx),(新建窗口指向文本文件,修改文件名后缀*.svc)新建空的Service.svc(appcode自动添加一个Service.cs),最后修改web.config,再建立个windows 客户端调用此服务
Service.cs是具体的代码,Service.svc(里面添加一段代码用来指定路径)
Service.svc空文件中新加入的代码 ,定义此服务的名字为MyWCFService
<%@ ServiceHost Language="C#" Debug="true" Service="MyWCFService" CodeBehind="~/App_Code/Service.cs"%>
Service.cs文件
[ServiceContract] --服务契约,定义在一个接口上
public interface IMyWCFService
{
[OperationContract] --行为契约
string Operation1(string myvalue);
}
public class MyWCFService : IMyWCFService
{
public string Operation1(string myvalue)
{
return "hello: " + myvalue;
}
}
web.config中的代码
<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<system.serviceModel>
<services>
<service name="MyWCFService" behaviorConfiguration="returnFaults">
<endpoint contract="IMyWCFService" binding="wsHttpBinding" address="http://127.0.0.1/service.svc"/>
</service>
</services>
<behaviors>
<!--<behavior name="returnFaults">
<serviceMetadata httpGetEnabled="true"/>
</behavior>-->
<serviceBehaviors>
<behavior name="returnFaults">
<serviceMetadata httpGetEnabled="true"/>
<!--开启元数据发布-->
</behavior>
</serviceBehaviors>
<!--<endpointBehaviors>
</endpointBehaviors>-->
</behaviors>
</system.serviceModel>
<system.web>
<compilation debug="true" targetFramework="4.0"/>
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
</system.web>
</configuration>
至此服务的宿主在IIS中布置完毕了,打开http://127.0.0.1/service.svc, 看到下图服务已经建立好
打开 http://127.0.0.1/Service.svc?wsdl ,可以看到服务描述语言(和asp.net服务很像)
winform中引用服务
客户端将服务名ServiceReference1,编程的时候就代码服务名,然后通过服务名找到具体的类和操作。(客户端的app.config也可以查看到一些服务信息)
windows客户端有个按钮和文本框,实现点击按钮从服务获取内容后在文本框中显示
private void button1_Click(object sender, EventArgs e)
{
ServiceReference1.MyWCFServiceClient wcfService1 = new ServiceReference1.MyWCFServiceClient();
//wcfService1.Open();
textBox1.Text = wcfService1.Operation1("哈哈");
//wcfService1.Close();
}
代码是客户端调用宿主为IIS的服务。
至此第一个wcf代码已经完成
WCF学习日记的更多相关文章
- WCF学习之旅—第三个示例之四(三十)
上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) WCF学习之旅—第三个示例之三(二十九) ...
- Linux学习日记-使用EF6 Code First(四)
一.在linux上使用EF 开发环境 VS2013+mono 3.10.0 +EF 6.1.0 先检测一下EF是不是6的 如果不是 请参阅 Linux学习日记-EF6的安装升级(三) 由于我的数据库 ...
- WCF学习之旅—第三个示例之二(二十八)
上接WCF学习之旅—第三个示例之一(二十七) 五.在项目BookMgr.Model创建实体类数据 第一步,安装Entity Framework 1) 使用NuGet下载最新版的Entity Fram ...
- WCF学习之旅—第三个示例之三(二十九)
上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) 在上一篇文章中我们创建了实体对象与接口协定,在这一篇文章中我们来学习如何创建WCF的服务端代码.具体步骤见下面. ...
- WCF学习之旅—WCF服务部署到IIS7.5(九)
上接 WCF学习之旅—WCF寄宿前的准备(八) 四.WCF服务部署到IIS7.5 我们把WCF寄宿在IIS之上,在IIS中宿主一个服务的主要优点是在发生客户端请求时宿主进程会被自动启动,并且你可以 ...
- WCF学习之旅—WCF服务部署到应用程序(十)
上接 WCF学习之旅—WCF寄宿前的准备(八) WCF学习之旅—WCF服务部署到IIS7.5(九) 五.控制台应用程序宿主 (1) 在解决方案下新建控制台输出项目 ConsoleHosting.如下 ...
- WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一)
上接 WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) 七 WCF服务的Windows 服务程序寄宿 这种方式的服务寄宿,和IIS一样有一个一样 ...
- WCF学习之旅—WCF服务的WAS寄宿(十二)
上接 WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一) 八.WAS宿主 IIS ...
- WCF学习之旅—WCF服务的批量寄宿(十三)
上接 WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一) WCF学习之旅—WCF ...
随机推荐
- atitit.提升开发效率---mda 软件开发方式的革命
atitit.提升开发效率---mda 软件开发方式的革命 1. 软件开发方式的革命开发工具的抽象层次将再次提升 1 2. 应用框架和其实现相分离 2 3. 目前的问题模型和代码不同步 2 4. MD ...
- jQuery/javascript实现网页注册的表单验证
<html> <head> <meta charset="utf-8"> <title>注册表单验证</title> & ...
- 结构体快排回顾(sort)
一般来说,我做竞赛的时候排序一般用快排 很快很方便 普通sort(从小到大) sort(a,a+n); 直接贴一段代码吧,包含了vector,sort,结构体等简单东西综合 #include < ...
- PHP中常用的正则表达式由哪些元素构成?
在程序开发中,我们常常要用到正则表达式,对于新手来说,很多时候知道正则表达式是怎么回事,但当真正需要使用的时候,却不知该用什么函数,具体的修饰符也比较混乱.下面小编就为大家整理了一些php正则表达式中 ...
- Gabor学习笔记
本文根据博客http://blog.csdn.net/watkinsong/article/details/7870996 ,博客http://www.cnblogs.com/yingying0907 ...
- 初识React,Virutal DOM, State以及生命周期
这是React分类下的第一篇文章,是在了解了一些基本面后,看Tyler文章,边看边理解边写的. React可以看做是MVC中的V,关注的是视图层.React的组件就像Angular的Directive ...
- eclipse web项目转maven项目
ps:好久没写博客了,工作了人就懒了,加油加油,up,up 1 eclipse web项目目录 /web app src com.xx.xx *.properties *.xml WebRoot W ...
- MySQL存储引擎选型
一.MySQL的存储引擎 完整的引擎说明还是看官方文档:http://dev.mysql.com/doc/refman/5.6/en/storage-engines.html 这里介绍一些主要的引擎 ...
- Javascript 严格模式
简介 严格模式是一种将更好的错误检查引入代码中的方法. 在使用严格模式时,你无法使用隐式声明的变量.将值赋给只读属性或将属性添加到不可扩展的对象等. 声明严格模式 可以通过在文件.程序或函数的开头添加 ...
- C# 个人常用代码积累
/// <summary> /// TextBox限制只能输入十六进制,且只能输入6个 /// </summary> /// <param name="send ...